【问题标题】:My strcmp doesn't return 0 when it should我的 strcmp 不应该返回 0
【发布时间】:2014-05-30 23:21:32
【问题描述】:

上下文:我正在搜索二维数组(水平、垂直和对角)中包含的所有单词。

所以我要做的是获取所有可能的单词,检查它们是否在给定的字典中,以及它们是否存储在数组中。问题是,我不希望它有重复。

这是代码的sn-p:

        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)。

我会在这里遗漏什么?

【问题讨论】:

  • encontradas 是如何填充的?
  • 它永远不会设置为 1,还是会重置为 0?在不研究周围逻辑的情况下,您不仅要在 strcmp() 发出值相等的信号时将 flag 设置为 1,而且每次找到 not 的值时将其设置回 0相等。

标签: c matrix strcmp


【解决方案1】:

flag 变量确实获得了 1 的值,但在下一次迭代中它又变回了 0

在循环之前将flag设置为零,找到匹配项后将其设置为1并退出循环:

flag = 0;
for (it = 0; encontradas[it] != NULL; it++) {
  if (strcmp(palavra,encontradas[it]) == 0) {
    flag=1;
    break;
  }
}

(逻辑工作不需要退出循环,但是一旦找到匹配项,就没有必要循环其余项目。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2017-11-08
    相关资源
    最近更新 更多