如何创建一个程序,打印出c中txt文件的字母直方图

时间:2016-10-11 00:55:50

标签: 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) {
        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文件中也是非常荒谬的高频。

a : 1
i : 1781796
l : 2
m : 1390299937
n : 32767
w : 1

当我的txt文件有&#34; william&#34;作为内容。老实说,我不知道什么是错的。是否与内存有关?任何帮助,将不胜感激!

0 个答案:

没有答案