我正在尝试使用此文本计算文件中的字母:
"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)
}
您需要做的是将字符转换为数组中的索引.您可以通过'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].但这取决于您以及您希望程序如何运作.
此外,您的代码不会读取文件,而是使用getchar从stdin(控制台)读取的文件.看看fopen,fclose和fread读取文件并处理它的内容.