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;

}

关于我的 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()orfgetc()并检查是否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 回答