2016-10-04 2 views
-1

Почему функция findString() возвращает указанные значения для данных аргументов?требуется объяснение результата, возвращаемого функцией findString()

FindString ("текст", "") возвращает 0.

FindString ("", "Текст") возвращает -1.

findString ("", "") возвращает -1.

Я прочитал на strstr и посмотрел на другие вопросы и просто не понял.

// find s1 inside source, return index number if found, -1 if not found  

#include <stdio.h> 
#include <stdbool.h> 

int findString (const char source[], const char s[]) 
{ 
    int i, j, foundit = false; 

    // try each character in source 

    for (i = 0; source[i] != '\0' && !foundit; ++i) { 
     foundit = true; 

     // now see if corresponding chars from s match 

     for (j = 0; s[j] != '\0' && foundit; ++j) 
      if (source[j + i] != s[j] || source[j + i] == '\0') 
       foundit = false; 

     if (foundit) 
      return i; 
    } 

    return -1; 
} 

int main (void) 
{ 
    int index; 

    printf ("index = %i\n", findString("text", "")); 
    printf ("index = %i\n", findString("", "text")); 
    printf ("index = %i\n", findString("", "")); 

    return 0; 
} 
+0

Вы пробовали пройти через отладчик? Какую IDE вы используете? – Podo

+0

gcc, minGW и блокнот – user6923395

+0

Случайное чтение подсказывает, что функция может быстро выручить, а затем возвращает -1. Пространственный случай, который ищет пустую строку, также кажется логичным. – usr2564301

ответ

2
  • Первый вызов возвращает 0, потому что пустая строка может быть найден в любой строке с индексом ноль (за исключением есть ошибка в коде, смотрите ниже)
  • Второй вызов возвращает -1, так как Непустая строка не может быть найдена в пустой строке
  • Третий вызов возвращает -1, потому что в вашем коде есть ошибка: когда внешний цикл не введен (т. е. строка source пуста), вы должны добавить специальный случай для возврата 0, когда строка поиска s также пуст.
+0

@ user6923395 Возврат должен быть 0, -1, 0. – dasblinkenlight

0

Он возвращает индекс первого появления s в source. Если s нет в source, он вернется -1

Смежные вопросы