首先,抱歉,我不擅长使用英语
这是我的输出
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
答案 0 :(得分:0)
您可以使用getc()
or fgetc()
并检查是否isalpha()
。
int c;
size_t count = 0;
...
c = fgetc(filehandle)
if (isalpha(c))
++count;
如果输入可以是宽字节,则可以使用fgetwc()
代替iswalpha()
进行检查。
然后你还必须确保locale is set:
setlocale(LC_ALL, "");
如果你只想计算所有字符的长度,你可以检查高位。
if ((c & 0xc0) != 0x80)
...
另一种方法可能是使用数组来收集统计数据,然后计算/检查事物。
E.g。 (ASCII only):
#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;
}
答案 1 :(得分:0)
我得到了@Barbiyong的观点。您想要计算要传递的输入文件中的字母字符数。但是对于那个功能,你为什么要使用fgets()函数?正如函数名称本身所说,它将输入作为字符串读取并输出。还有一个名为fgetc()的函数。请参阅以下代码以了解您的理解并相应地进行更改。
c=fgetc(pIn);
if isaplpha(c)
{
printf("Encountered alphabet:%c",char(c));
count++;
}