如何创建一个程序,从c语言中的txt文件中打印出字母的直方图
因此,程序应该接收一个只有小写字母且没有空格的txt文件。例如“aabbhello”。然后,程序将向命令行打印直方图:如何创建一个程序,从c语言中的txt文件中打印出字母的直方图,c,file-io,char,histogram,counting,C,File Io,Char,Histogram,Counting,因此,程序应该接收一个只有小写字母且没有空格的txt文件。例如“aabbhello”。然后,程序将向命令行打印直方图: a: 2 b: 2 h: 1 e: 1 l: 2 o: 1 我目前拥有的东西应该可以工作,但总是给我奇怪的输出: void file_histogram(char *filename) { FILE *fptr; int fsize; fptr = fopen(filename, "r"); if(fptr == NULL) {
a: 2
b: 2
h: 1
e: 1
l: 2
o: 1
我目前拥有的东西应该可以工作,但总是给我奇怪的输出:
void file_histogram(char *filename)
{
FILE *fptr;
int fsize;
fptr = fopen(filename, "r");
if(fptr == NULL) {
printf("File did not open \n");
}
fseek(fptr, 0, SEEK_END);
fsize = ftell(fptr);
char content[fsize];
rewind(fptr);
char c;
int count1 = 0;
while(fscanf(fptr, "%c", &c) == 1) {
content[count1] = c;
count1++;
}
char name[fsize];
int count[26];
int i;
for (i = 0; i < fsize; i++) {
//printf("%d", i);
name[i] = content[i];
}
int length = strlen(name);
for(i = 0; i < length; i++) {
count[i] = 0;
}
for(i = 0; i < length; i++) {
count[content[i] - 'a']++;
}
for(i = 0; i < 26; i++) {
if(count[i] != 0) {
printf("%c : %d \n", i + 'a', count[i]);
}
}
fclose(fptr);
}
这就是我的txt文件以“william”作为内容时得到的结果。我真的不知道怎么了。这可能和记忆有关吗?任何帮助都将不胜感激 您是否尝试过以任何方式调试您的程序?即使用调试器和/或调试打印语句来跟踪程序的执行情况?请与我们共享您找到的调试数据。对于初始化计数的循环:
For(i=0;iFor(i=0;ii对print语句进行了一些调试,即,我打印了内容,输出为:william。我还打印了for循环的第一次迭代次数,即7次。因此数组内容和名称中应该只有7个元素。每个数组都应该有字符“w”“i”“l”“i”“a”“m”。但是输出中的频率put仍然完全关闭。有时名称中甚至没有出现字母。您是否尝试过修复我在第二条评论中提到的for循环?效果很好!谢谢。我意识到for循环的范围是错误的。当您在c中创建数组时,值似乎都不是0。您是否尝试在中调试程序任何方法?即使用调试器和/或debug print语句跟踪程序的执行?请与我们共享您找到的调试数据。对于initscount
:For(i=0;iFor(i=0;ii对print语句进行了一些调试,即,我打印了内容,输出为:william。我还打印了for循环的第一次迭代次数,即7次。因此数组内容和名称中应该只有7个元素。每个数组都应该有字符“w”“i”“l”“i”“a”“m”。但是输出中的频率put仍然完全关闭。有时名称中甚至没有出现字母。您是否尝试按照我在第二条评论中提到的修复for循环?效果很好!谢谢。我意识到for循环的范围是错误的。当您在c中创建数组时,值似乎都不为0。
a : 1
i : 1781796
l : 2
m : 1390299937
n : 32767
w : 1