#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