代码未返回正确的索引

Code not returning the right index

本文关键字:索引 返回 代码      更新时间:2023-10-16

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

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

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

我做错了什么?

问候

在你的内部循环中,当你发现一个字符相同时,你需要打破 - 就像现在一样,当第二个字符串中有任何不同的字符时,即使前面的字符是相同的。你想要类似的东西

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

也就是说,当您浏览整个第二个字符串而没有找到该字符时,您希望返回第一个字符串的第i个字符。

对于入门级别的编程练习,最好手动仔细执行代码(逐步执行自己,看看发生了什么(。正如 TooTone 所建议的那样,当你找到匹配项时,你需要打破循环:

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

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

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);
   }