我正在尝试使用此文本计算文件中的字母:
“abbcccddddeeeeeffffff ........ zzzzzzzzzzzzzzzzzzzzzzzzzz”
我想创建一个计数器数组: 为了做到这一点:
count[0] = 1 /* # of a's */
count[1] = 2 /* # of b's */
/* ... */
count[25] = 26 /* # of z's */
这是我的第一个方法
#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] ++;
}
}
}
}
答案 0 :(得分:5)
您需要做的是将角色转换为数组中的索引。您可以通过从字符中减去'a'
来做到这一点,这将是索引。例如:
'a' - 'a' == 0
'b' - 'a' == 1
...
'z' - 'a' == 25
使用该索引,您知道要递增的元素。对这个索引进行检查可能会很好,所以c - 'a' >= 0 && c - 'a' < 26
所以你不要在数组的边界之外进行索引。
此外,请确保将数组的每个元素初始化为0
,以便每个字符的计数首先从0开始,如下所示:
int count[26] = { };
这会将所有元素设置为0
。
您也可能希望使用tolower(c) - 'a'
而不仅仅是c = 'a'
,这样它会使字母小写,无论它是否为小写,以便数组包含大写和小写版本的计数例如,'a'
和'A'
的字母将增加count[0]
。但这取决于您以及您希望程序如何运作。
此外,您的代码不会读取文件,而是使用从getchar
(控制台)读取的stdin
。请查看fopen
,fclose
和fread
以阅读文件并处理其内容。
答案 1 :(得分:-2)
我认为你应该自己做作业。
无论如何,试试这个:
#include <stdio.h>
#include <ctype.h>
int main()
{
int count[26];
int i, c;
for(i = 0; i < 26; i++)
{
count[i] = 0;
}
while ((c = getchar()) != EOF)
{
if (isalpha(c))
{
++count[tolower(c) - 'a'];
}
}
}