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

それはおそらく、すべてのキャラクターではなく、カウントを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++)

それ以外は、別の配列を使用して各文字の出現回数をカウントし、文字列を 1 回通過するだけで全体を高速化できます...

于 2012-07-08T16:55:20.393 に答える
1

count最初の for ループ内で初期化する必要があります

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