背景信息:我正在搜索二维数组中包含的所有单词(水平,垂直和对角线)。
所以我所做的就是获得所有可能的单词,检查它们是否在给定的字典中以及它们是否存储在数组中。问题是,我不希望它有重复。
以下是代码片段:
for (i=l-1;i>=0;i--){
palavra[aux]=mat[i][caux];
for (j=i;j>=0;j--){
palavra[aux]=mat[j][caux];
palavra[aux+1]='\0';
for (it=0;encontradas[it]!=NULL;it++){
if (strcmp(palavra,encontradas[it])==0)flag=1;
else flag=0;
}
if (flag==0) {
r = palavra_existe(dic,palavra);
if (r!=0) {
found[auxenc]=mystrdup(palavra);
auxenc++;
}
}
flag=0;
aux++;
}
aux=0;
}
if (strcmp(palavra, found[it])==0)flag=1
行是否检查已形成的措辞是否已经找到,以避免产生重复。问题是它不起作用,无论如何都会出现重复(因为标志变量永远不会取值1)。
我可以在这里找到什么?
答案 0 :(得分:1)
flag
变量确实获得值1
,但在下一次迭代中它会再次返回0
。
在循环之前将flag
设置为零,当找到匹配项时,将其设置为1
并退出循环:
flag = 0;
for (it = 0; encontradas[it] != NULL; it++) {
if (strcmp(palavra,encontradas[it]) == 0) {
flag=1;
break;
}
}
(逻辑工作不需要退出循环,但是一旦找到匹配项就没有必要循环其余的项目。)