在c中获取数组中最常见的字符

时间:2015-08-18 14:22:27

标签: c arrays character

我正在尝试从数组中获取最常用的字符。

这是我的代码

#include <stdio.h>

int main(void)
{
    int c[1000];
    char input[] = "abcdab";    
    int i;

    for(i=0; input[i]; i++)
    {
        c[input[i]]++; 
    }

    int j = 0;
    char str = 0;

    for(i=0; i<256; i++)
    {
        if(c[i] > j)
        {
            j = c[i];
            str = i;
        } 
    }

    printf("%c\n", str); 
    return 0;
}

它返回&#39; a&#39;

但我想得到一个&#39;和&#39; b&#39;因为它们是数组中最常用的字符。 任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

您正在通过整个阵列寻找最大值,并记住第一个。使用您拥有的解决方案,您需要一个额外的循环:

for(i=0; i<256; i++){ // Look for all maximums
    if(c[i] == j) // If it is the maximum
    {
         printf("%c\n", i); // print the character
    } 
}

请注意,您的数组c未初始化为全零,因此纯粹是偶然(不是真的)代码正在运行。如果您希望c为全零,则需要将其声明为int c[1000] = {0};或在其上调用memset