在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
。
我正在尝试从数组中获取出现次数最多的字符。
这是我的代码
#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
。