1

在 Windows 7 64 位上使用 Dev C++

我试图实现 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

您的指针数组不是以空值终止的,但在您的循环中,您正在检查空值,例如:

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

所以你应该空终止你的arr喜欢

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