字符可以包含任何数字,字母,符号,例如:; @等。 一种方法是使用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;
}
答案 0 :(得分:5)
在ASCII格式中,可打印字符的代码从0x20
到0x7E
,因此少于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>
语句中使用isalpha
(isdigit
,ispunct
,if
等)中的函数你可以很容易地对它们进行分类。
PS:有关这些功能的列表,请参阅: