требуется объяснение результата, возвращаемого функцией FindString()

#c

#c

Вопрос:

Почему следующая функция FindString() возвращает указанные значения для заданных аргументов?

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

FindString («», «text») возвращает -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] != ''  amp;amp;  !foundit;    i ) {  
        foundit = true;  

        // now see if corresponding chars from s match   

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

        if (foundit)  
           return i;  
    }  

    return -1;  
}  

int main (void)
{
    int index;

    printf ("index = %in", findString("text", ""));
    printf ("index = %in", findString("", "text"));
    printf ("index = %in", findString("", ""));

    return 0;
}
  

Комментарии:

1. Вы пробовали пошаговое выполнение с помощью отладчика? Какую среду IDE вы используете?

2. gcc, MinGW и блокнот

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

Ответ №1:

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

Комментарии:

1. @user6923395 Возвращаемое значение должно быть 0, -1, 0.

Ответ №2:

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