1

Windows764ビットでのDevC++の使用

私は、文の中で最も多く出現する単語を最適な方法で識別するacプログラムを実装しようとしていました。これは私が作成したものです。

 struct word{
    char *str;
    int count;
    };

int main()
{
    struct word words[10]={0};
    int i,j,flag=0,max=0;
    char *maxw=NULL,*arr[] = {"how","do","you","do"};


    for(i=0;arr[i];i++)
    {
        flag =0;
        for(j=0;words[j].count!=0;j++)
            if(strcmp(words[j].str,arr[i]) == 0 )
            {
                words[j].count++;
                flag = 1;
                break;
            }

        if(flag == 0){  
        words[j].str = arr[i];
        words[j].count++;
        }

        if (max < words[j].count){
        max = words[j].count;
        maxw=words[j].str;
        }
    }
    printf("\nMost occurrences is of %s with %d count",maxw,max);

    getch();
    return 0;
}

私がすでに理解していることは、最大出現単語が文の最後の単語でもある場合にのみプログラムがクラッシュすることであり、これはメモリ内の固定文字列のアドレスと関係があります。しかし、ここで何が起こっているのか正確にはわかりません。また、これはこの問題の良い解決策ですか、それともより最適な解決策がありますか?

PSこれは宿題ではありません。私はコーディングを練習しているだけです。

4

1 に答える 1

3

ポインタの配列はnullで終了していませんが、ループでは次のようにnullをチェックしています。

for(i=0;arr[i];i++)

だからあなたはあなたのarrようなものをnull終了する必要があります

char *maxw=NULL,*arr[] = {"how","do","you","do",NULL}
于 2012-08-02T11:42:37.253 に答える