C中的计数器数组

0 c arrays

我正在尝试使用此文本计算文件中的字母:

"abbcccddddeeeeeffffff ........ zzzzzzzzzzzzzzzzzzzzzzzzzz"

我想创建一个计数器数组:为了做到这一点:

count[0] = 1 /* # of a's */
count[1] = 2 /* # of b's */

/* ... */

count[25] = 26 /* # of z's */
Run Code Online (Sandbox Code Playgroud)

这是我的第一个方法

#include<stdio.h>
#include<ctype.h>

int main() {
    int count[26];
    int i;
    int c;
    for(i=0; i<26; i++){
       count[i] = 0;
    }

    while ((c = getchar()) != EOF) {
        if (isalpha(c)) {
         count[i] ++;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

Set*_*gie 5

您需要做的是将字符转换为数组中的索引.您可以通过'a'从字符中减去索引来完成此操作.例如:

'a' - 'a' == 0
'b' - 'a' == 1
...
'z' - 'a' == 25
Run Code Online (Sandbox Code Playgroud)

使用该索引,您知道要递增的元素.检查此索引可能会很好,c - 'a' >= 0 && c - 'a' < 26这样您就不会在数组的边界之外进行索引.

此外,确保初始化数组的每个元素,0以便每个字符的计数首先从0开始,如下所示:

int count[26] = { };
Run Code Online (Sandbox Code Playgroud)

这将设置所有元素0.

您还可能想使用tolower(c) - 'a',而不是仅仅c = 'a'使阵列包含字母的大写和小写版本的数量,例如两个,这样就会使字母小写无论是小写与否'a'以及'A'将递增count[0].但这取决于您以及您希望程序如何运作.

此外,您的代码不会读取文件,而是使用getcharstdin(控制台)读取的文件.看看fopen,fclosefread读取文件并处理它的内容.