如何使用C计算文件中不同类型字符的数量。

时间:2013-06-14 21:03:56

标签: c file

字符可以包含任何数字,字母,符号,例如:; @等。 一种方法是使用switch case语句,如下所示。但那将是简单而漫长的过程。有没有其他方法可用短方法?

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>

int main(void) {
FILE *fp;
fp = fopen("input.txt","r");
int ch,count[36]= {0};
if (fp == NULL)
{
fprintf(stderr,
        "Failed to open input.txt: %s\n",
         strerror(errno));
}
else
{
while ((ch = fgetc(fp)) != EOF)
{
    switch (ch)
    {
    case 'a':
        count[0]++;
        break;
    case 'b':
        count[1]++;
        break;
    default:
        count[2]++;
    }
}

fclose(fp);
}
    printf("count a is %d", count[0]);
    printf("count b is %d", count[1]);
    printf("count c is %d", count[2]);
    return 0;
}

4 个答案:

答案 0 :(得分:5)

在ASCII格式中,可打印字符的代码从0x200x7E,因此少于128个字符。因此对于ASCII只使用128个字符的数组:

int count[128] = {0};

使用以下方式更新您的点数:

count[ch]++;

并使用以下内容打印可打印字符:

for (i = 0x20; i <= 0x7E; i++)
{
    printf("count %c is %d", i, count[i]);
} 

答案 1 :(得分:3)

使用大小为2 ^ 8的数组并增加相应的成员。

while ((ch = fgetc(fp)) != EOF)
{
    characters[ ch ] += 1 ;
....

数组characters的索引符合asci table

答案 2 :(得分:1)

如果您正在阅读ASCII字符:

  

频率[CH] ++;

其中frequency是大小为128的整数数组

答案 3 :(得分:1)

如果您在{{1}内的一系列<ctype.h>语句中使用isalphaisdigitispunctif等)中的函数你可以很容易地对它们进行分类。

PS:有关这些功能的列表,请参阅:

http://www.cplusplus.com/reference/cctype/