Код не возвращает правильный индекс

0

Я пытаюсь решить небольшую проблему. У меня две строки. 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 отлично работает, если строки одинаковы.

Что я делаю не так?

С уважением

  • 0
    Подумай, что он делает. Каждый раз, когда любой из символов второго не совпадает, возвращается i . Попробуйте с s1 = "hello" и s2 = "hhhhh" и вы получите 1 .
  • 0
    Привет, @chris. Крис. Да, я знаю, в чем проблема;) Я не просматриваю всю строку, поэтому, если какой-либо символ не совпадает в начале, он вернется, даже если он повторится вперед.
Теги:

4 ответа

1
Лучший ответ

В своем внутреннем цикле вам нужно вырваться, когда вы обнаружите, что персонаж тот же, что и вы, вы возвращаетесь, когда во второй строке есть какие-то разные символы, даже если предыдущий один и тот же. Вы хотите что-то вроде

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

Т.е. вы хотите вернуть i й символ первой строки, когда вы внесли свой путь через всю вторую строку, не обнаружив этого символа.

  • 0
    А ну понятно. Поэтому я сравниваю символы, которые могут отличаться, но я могу повторить их после текущего индекса ... хорошо, спасибо :)
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;
}
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);
   }
  • 0
    Привет @MahonriMoriancumer, почему вы используете () на возвращениях?
  • 2
    Этот ответ может использовать некоторые объяснения. Почему это работает и почему не оригинальный код?
Показать ещё 2 комментария
0

Поскольку внутренний for-loop сравнивает первую букву первой строки со всеми буквами во второй строке.

  • 0
    хорошо, что это идея ... я хочу посмотреть, если char в индексе в строке 1 находится в любой позиции в string2.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню