在c中获取数组中出现频率最高的字符

Getting most frequent characters in array in c

我正在尝试从数组中获取出现次数最多的字符。

这是我的代码

#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;
}

它returns'a'

但我想得到 'a' 和 'b',因为它们是数组中出现频率最高的字符。 任何帮助将不胜感激,谢谢。

您正在遍历整个数组以寻找最大值,并记住第一个。使用您拥有的解决方案,您需要一个额外的循环:

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