Поиск в строках
Когда говорят о поиске в строках, обычно рассматривают две задачи: найти первый заданный символ с начала (или с конца), или также найти заданную подстроку (если она есть).
Первую задачу выполняют функции strchr(поиск с начала строки) и strrchr(поиск с кон-
ца строки), а вторую – функция strstr.
Все эти функции возвращают указатель на найденный символ (или на первый символ
найденной подстроки). Это значит, что переменная, в которую записывается это значение,
должна быть объявлена как указатель на символьную переменную. Мы уже встречались с ука-
зателями, когда работали с файлами. Указатель – это ячейка в памяти, в которую можно запи-
сывать адрес другой переменной.
Структура вызова функций такая: на первом месте – где искать (строка), на втором – что
искать (один символ для функций strchrи strrchrили строка для strstr). Чтобы полу-
чить номер символа с начала строки, надо вычесть из полученного указателя адрес начала мас-
сива. Если поиск завершился неудачно, функции возвращают NULL.
#include <stdio.h>
#include <string.h>
Main()
{
chars1[] = "Мамамылараму",
s2[] = "Война и мир", *p;
p = strchr(s1, 'а');
if ( p != NULL ) {
printf("Первая буква а: номер %d", p - s1);
p = strrchr(s1, 'а');
printf("\nПоследняя буква а: номер %d", p - s1);
}
p = strstr( s2, "мир");
if ( p != NULL )
printf("\nНашлимирв %s", s2);
else printf("\nНет слова мир в %s", s2);
}
Вспомните, что при чтении строк из файла с помощью функции fgetsна конце иногда остается символ перехода на новую строку '\n'. Чаще всего он совсем не нужен и надо его удалить– поставить на его месте нуль (признак конца строки). Делается это так:
char s[80], *p;
...
p = strrchr (s, '\n'); // ищемсимвол '\n'
if ( p != NULL )// если нашли, ...
*p = '\0'; // записываем в это место '\0'
Рассмотрим теперь более сложную задачу.
Пример.С клавиатуры вводится предложение и слово. Надо определить, сколько раз встречается это слово в предложении.
Функция strstrможет определить только первое вхождение слова в строку, поэтому в
одну строчку эту задачу не решить.Попробуем использовать такую идею: если мы нашли адрес первого данного слова в строке и записали его в указатель p, то искать следующее слово нужно не сна чала строки, а с адреса p+длина_слова. Повторяем эту операцию в цикле, пока функция strstrможет найти слово в оставшейся части строки. Поскольку начало области поиска постоянно смещается с #include <stdio.h>
#include <string.h>
Main()
{ int len, count;
char s[80], word[20],
*p, // указатель на найденное слово
*start; // указатель на начало зоны поиска
puts ( "Введите предложение" );
Дата добавления: 2015-10-05; просмотров: 637;