Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_C-09(string).doc
Скачиваний:
3
Добавлен:
21.11.2019
Размер:
92.16 Кб
Скачать

Поиск подстроки

Задана две строки: одна строка, в которой нужно искать заданную последовательность символов. Вторая — последовательность символов, которые нужно найти (шаблон для поиска).

Например, задано слово "Информатика", и нужно выяснить, входит ли в него подстрока "форма":

И

н

ф

о

р

м

а

т

и

к

а

\0

ф

о

р

м

а

\0

Поиск можно представить как "скольжение" шаблона вдоль строки до тех пор, пока в строке не будет найдено совпадение с этим шаблоном (ищется первое вхождение подстроки).

В программах на Си для поиска подстрок применяется библиотечная функция strstr:

char* strstr(char* s1, char* s2) .

Здесь s1 — строка, в которой ведется поиск, а

s2 — (под)строка, используемая в качестве образца для поиска.

Результат поиска функция возвращает следующим образом:

а) если поиск завершился успешно (строка s2 является частью строки s1), то функция возвращает адрес первого символа найденной в подстроки (фактически это указатель на оставшуюся часть строки s1).

б) если поиск завершился неудачно, то NULL.

ЗАДАНИЕ 5 (поиск подстроки)

1. Написать программу, в которой задан литерал

"information, informatics, informatization".

Выполнить в этом литерале поиск подстроки "matics". Вывести на экран строку, которая соответствуют возвращаемому функцией strstr указателю. Объяснить результат работы программы.

Замечание

Рассмотрены только наиболее часто применяемые функции стандартной библиотеки. Помимо этого, имеются функции с другим назначением, такие как strtok — разбиение строки на лексемы, или варианты приведенных функций с расширенными возможностями (strncpy, strncmp и т.п.).

Контрольные вопросы

1. В каком заголовочном файле описаны функции стандартной библиотеки Си для работы со строками?

2. Учитывается ли нуль-терминатор при подсчете длины строки?

3. Что происходит при склеивании (конкатенации) строк с нуль-терминатором той строки, к которой добавляется вторая строка?

4. Когда при операции сравнения две строки одинаковой длины "неравны"? Как выбирается "большая" из них?

5. Когда в строке выполняется поиск подстроки, то функция strstr возвращает адреса всех найденных вхождений шаблонной строки или только адрес первого вхождения?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]