0

最初に、申し訳ありませんが、私は英語を使うのが苦手です

これが私の出力

you just read : abcdefg4523 hij

you just read : 234kl  monp

you just read : qrs tuv

you just read : wx 452 z

This file have 4 alphabets 

最後の行は、代わりに持っている行を数えます

アルファベットだけを数えたいのですが、出力に「このファイルには26個のアルファベットがあります」と出力されます(下部にある私のファイルを参照してください)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INPUT "file.txt"
#define MAX 1024
int main(void)
{
    FILE *pIn;
    int count = 0 ;
    char inputBuffer[MAX];
    char alphabet[MAX];
    pIn=fopen(INPUT,"r");
    while (fgets(inputBuffer,sizeof(inputBuffer),pIn) != NULL)
    {
        printf("you just read : %s",inputBuffer);
        count++;
    }
    fclose(pIn);
    printf("\nThis file have %d alphabets\n",count);
    return 0;

}

MY FILE.txt について:

abcdefg4523 hij

234kl  monp

qrs tuv

wx 45y2 z
4

2 に答える 2

0

ポイント@Barbiyongを取得しました。渡す入力ファイルのアルファベット文字数をカウントしたいとします。しかし、その機能のために、なぜ fgets() 関数を利用しているのですか? 関数名の通り、入力を文字列として読み込んで出力します。そのために fgetc() という別の関数があります。以下のコードを参照して理解を深め、それに応じて変更してください。

c=fgetc(pIn);
if isaplpha(c)
{
  printf("Encountered alphabet:%c",char(c));
  count++;
}
于 2013-10-31T04:38:17.397 に答える
0

getc()または を使用してかどうかfgetc()を確認できますisalpha()

int c;
size_t count = 0;

...

c = fgetc(filehandle)
if (isalpha(c))
    ++count;

入力がワイドバイトになる可能性がある場合は、fgetwc()代わりに使用して で確認できますiswalpha()

次に、ロケールが設定されていることも確認する必要があります。

setlocale(LC_ALL, "");

または、すべての文字の長さだけを数えたい場合は、上位ビットを確認できます。

if ((c & 0xc0) != 0x80) 
    ...

別の方法は、配列を使用して統計を収集し、後で計算/チェックすることです。

例 ( ASCII のみ):

#include <stdio.h>
#include <ctype.h>

void print_stats(unsigned int cc[256])
{
    int i;
    size_t sum = 0;

    fprintf(stdout,
        "----------------\n"
        "Stats all bytes:\n"
        "----------------\n"
    );
    for (i = 0; i < 256; ++i) {
        sum += cc[i];
        if (cc[i]) {
            if (isprint(i))
                fprintf(stdout, "%c   : %d\n", i, cc[i]);
            else
                fprintf(stdout, "0x%02x: %d\n", i, cc[i]);

        }
    }
    fprintf(stdout, "Total: %u bytes.\n", sum);
}

void print_stats_alpha(unsigned int cc[256])
{
    int i;
    size_t sum = 0;

    fprintf(stdout,
        "------------------\n"
        "Stats alpha bytes:\n"
        "------------------\n"
    );
    for (i = 0; i < 256; ++i) {
        if (cc[i] && isalpha(i)) {
            sum += cc[i];
            fprintf(stdout,
                "%c: %d\n",
                (char)i, cc[i]
            );
        }
    }
    fprintf(stdout, "Total: %u alpha bytes.\n", sum);
}

int main(int argc, char *argv[])
{
    FILE *fh;
    unsigned int cchar[256] = {0};
    int c;

    if (argc == 1) {
        fprintf(stderr, "Usage: %s <file>\n", argv[0]);
        return 1;
    }

    if (!(fh = fopen(argv[1], "r"))) {
        perror(argv[1]);
        return 1;
    }


    while ((c = getc(fh)) != EOF) {
        ++cchar[c];
    }

    fclose(fh);

    print_stats(cchar);

    print_stats_alpha(cchar);

    return 0;
}
于 2013-10-31T04:28:08.970 に答える