C中的计数器数组

时间:2011-12-06 23:50:38

标签: c arrays

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

  

“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] ++;
       }
    }
}

}

2 个答案:

答案 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。请查看fopenfclosefread以阅读文件并处理其内容。

答案 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'];
        }
    } 
}