在Windows 7 64位上使用Dev C ++
我试图实现一个c程序,以最佳方式识别句子中出现次数最多的单词。 这就是我创造的......
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;
}
我已经想到的是,只有当最大出现的单词也是句子的最后一个单词时,程序才会崩溃,这与内存中固定字符串的地址有关。但我不确定这里到底发生了什么。此外,这是一个很好的解决方案,还是存在一些更优化的解决方案?
P.S。这不是家庭作业,我只是在练习一些编码。
答案 0 :(得分:3)
您的指针数组不是以null结尾,但在您的循环中,您正在检查null,如:
for(i=0;arr[i];i++)
所以你应该null终止你的arr
喜欢
char *maxw=NULL,*arr[] = {"how","do","you","do",NULL}