我有一个程序应该计算一个字母出现在文本文件中的次数。
void file_histogram(char *filename)
{
FILE *file1;
file1 = fopen(filename, "r");
int size = 26;
int charCounters[size];
char c;
int i, j;
if(file1 != NULL) {
while(fscanf(file1, "%c", &c) == 1) {
for(i = 0; i < size; ++i) {
if(c == i + 97) {
charCounters[i]++;
break;
}
}
}
}
for(j = 0; j < size; ++j)
printf("%c: %d\n", j + 97, charCounters[j]);
fclose(file1);
这似乎正在做的是计算第一个字符两次,然后大约一半被正确计算,而另一半似乎达到最大值或溢出。到底发生了什么?
答案 0 :(得分:0)
第一个for()
循环的逻辑不正确。提出类似的建议:
#include <ctype.h>
....
// initialize to all 0s
int charCounters[26] = {0};
....
while(fscanf(file1, "%c", &c) == 1)
{
if( isalpha(c) )
{ // then alphabet a...z or A...Z
// -'a' to get offset from lower case 'a'
// to use as index into array
charCounters[ tolower(c)-'a' ]++;
}
}