1

我正在尝试使用以下算法查找此数组中出现次数最多的字符:

char a[]={"aaaadddddaa"};
int max=0;
int count=0;
char maxCharcter;
for(char q='a';q<='z';q++)
{
    for(int i=0; i<strlen(a);i++)
    {
        if(a[i]==q)
            count++;
    }

    if(count>max)
    {
        max=count;
        maxCharcter=q;
    }
}

cout<<max<<endl;
cout<<maxCharcter<<endl;

输出应该是max=6 maxCharcter=a,但我得到了max=11 maxCharcter=d。我究竟做错了什么?

4

2 回答 2

1

count应该在你的第一个 for 循环中初始化

for(char q='a';q<='z';q++) {
   count = 0;
   //continue code here
}
于 2012-07-08T16:53:29.190 回答
1

那可能是您只“重置”一次计数,而不是每个字符。

int count=0;
char maxCharcter;
for(char q='a';q<='z';q++)
{
    for(int i=0; i<strlen(a);i++)

大概应该是

char maxCharcter;
for(char q='a';q<='z';q++)
{
    int count=0;
    for(int i=0; i<strlen(a);i++)

除此之外,您可以通过一次遍历字符串来加快整个过程,使用另一个数组来计算每个字符的出现次数......

于 2012-07-08T16:55:20.393 回答