C 存储文本文件中的每个字符

C 存储文本文件中的每个字符,c,string,file,C,String,File,首先,对不起,我不擅长使用英语 这是我的输出 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个字母表”(请参见底部的我的文件) 你可以使用并检查一下 如果输入可以是宽字节,则可以改为使用并

首先,对不起,我不擅长使用英语

这是我的输出

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个字母表”(请参见底部的我的文件)

你可以使用并检查一下


如果输入可以是宽字节,则可以改为使用并通过检查

然后,您还必须确保:

或者,如果只想计算所有字符的长度,可以检查高位

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

另一种方法是使用数组收集统计数据,然后计算/检查数据

例如:():

#包括
#包括
无效打印统计信息(无符号整数cc[256])
{
int i;
大小总和=0;
fprintf(标准输出),
“--------------\n”
“统计所有字节:\n”
“--------------\n”
);
对于(i=0;i<256;++i){
总和+=cc[i];
if(cc[i]){
如果(打印(i))
fprintf(标准输出,“%c:%d\n”,i,cc[i]);
其他的
fprintf(标准输出,“0x%02x:%d\n”,i,cc[i]);
}
}
fprintf(标准输出,“总计:%u字节。\n”,总和);
}
无效打印\u统计\u alpha(无符号整数cc[256])
{
int i;
大小总和=0;
fprintf(标准输出),
“--------------\n”
“统计alpha字节:\n”
“--------------\n”
);
对于(i=0;i<256;++i){
if(抄送[i]&&isalpha(i)){
总和+=cc[i];
fprintf(标准输出),
“%c:%d\n”,
(char)i,cc[i]
);
}
}
fprintf(标准输出,“总计:%u个alpha字节。\n”,总和);
}
int main(int argc,char*argv[])
{
文件*fh;
无符号int-cchar[256]={0};
INTC;
如果(argc==1){
fprintf(stderr,“用法:%s\n”,argv[0]);
返回1;
}
如果(!(fh=fopen(argv[1],“r”)){
perror(argv[1]);
返回1;
}
而((c=getc(fh))!=EOF){
++cchar[c];
}
fclose(fh);
打印统计数据(cchar);
打印统计数据α(cchar);
返回0;
}

我明白了@Barbiyong的意思。您希望计算要传递的输入文件中的字母字符数。但是为了实现这个功能,为什么要使用fgets()函数呢?正如函数名本身所说,它将以字符串形式读取输入并输出。还有另一个函数名为fgetc()。请参考下面的代码以了解情况,并进行相应的更改

c=fgetc(pIn);
if isaplpha(c)
{
  printf("Encountered alphabet:%c",char(c));
  count++;
}

杰出的。一定要给你的服务生小费。儿子,如果你想让别人明白你的意思,你需要提高英语水平。我是南亚人,我会提高我的英语:)你的计划似乎运作良好。它从文件中读入行,打印出来,然后说有多少行。它也应该做些别的事情吗?什么是数组
char字母表[MAX]原因?取消接受的任何特定原因?
int c;
size_t count = 0;

...

c = fgetc(filehandle)
if (isalpha(c))
    ++count;
setlocale(LC_ALL, "");
if ((c & 0xc0) != 0x80) 
    ...
#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;
}
c=fgetc(pIn);
if isaplpha(c)
{
  printf("Encountered alphabet:%c",char(c));
  count++;
}