代码没有返回正确的索引

时间:2014-04-12 18:09:19

标签: c++ c

我想解决一个小问题。我有两个字符串。 s1s2。我希望我的函数返回s1的第一个索引,该索引具有字符串s2中不存在的字符。这是我的代码。

int cad_nenhum_dos (char s1[], char s2[]){
int i,j;
    for (i=0;s1[i]!='\0';i++)
    {
            for (j=0;s2[j]!='\0';j++)
                    if (s1[i]!=s2[j]) return i;
    }
return -1;
}

如果我运行s1="hello" s2="hellm",则结果应为索引4,因为s1[4]='o'中不存在"o"s2。 ..但是当我跑这个时,我总是得到0。如果字符串相同,-1可以正常工作。

我做错了什么?

此致

4 个答案:

答案 0 :(得分:1)

在你的内循环中,你需要在找到一个相同的角色时突破 - 当你在第二个字符串中有任何个不同的字符时,它会立即返回,即使较早的一个是相同的。你想要像

这样的东西
        for (j=0;s2[j]!='\0';j++)
                if (s1[i]==s2[j]) break;
        if (s2[j]==0)
                return i;

即。你希望在没有找到该字符的情况下通过第二个字符串的整个来返回第一个字符串的i个字符。

答案 1 :(得分:1)

对于介绍级别的编程练习,最好手动小心地执行代码(逐步完成并查看正在发生的事情)。 正如TooTone建议的那样,当你找到匹配时你需要突破循环:

for (int i = 0; s1[i] != '\0'; i++)
{
    bool charFound = false;
    for (int j = 0; s2[j] != '\0'; j++)
    {
        if (s1[i] == s2[j])
        {
            charFound = true;
            break;
        }
    }

    if ( ! charFound)
        return i;
}

答案 2 :(得分:0)

因为内部for循环将第一个字符串的第一个字母与第二个字符串中的所有字母进行比较。

答案 3 :(得分:0)

int cad_nenhum_dos (char s1[], char s2[])
   {
   int i,j;

   for(i=0; s1[i]; i++)
      {
      if(s1[i] != s2[j]) 
         return(i);
      }

   return(-1);
   }