Я пытаюсь решить небольшую проблему. У меня две строки. s1
и s2
. Я хочу, чтобы моя функция возвращала первый индекс 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
отлично работает, если строки одинаковы.
Что я делаю не так?
С уважением
В своем внутреннем цикле вам нужно вырваться, когда вы обнаружите, что персонаж тот же, что и вы, вы возвращаетесь, когда во второй строке есть какие-то разные символы, даже если предыдущий один и тот же. Вы хотите что-то вроде
for (j=0;s2[j]!='\0';j++)
if (s1[i]==s2[j]) break;
if (s2[j]==0)
return i;
Т.е. вы хотите вернуть i
й символ первой строки, когда вы внесли свой путь через всю вторую строку, не обнаружив этого символа.
Для упражнений по программированию на вводном уровне неплохо тщательно выполнить код вручную (пройдите через себя и посмотрите, что происходит). Как было предложено 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;
}
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);
}
Поскольку внутренний for-loop сравнивает первую букву первой строки со всеми буквами во второй строке.
i
. Попробуйте сs1 = "hello"
иs2 = "hhhhh"
и вы получите1
.