Поиск в строках

Когда говорят о поиске в строках, обычно рассматривают две задачи: найти первый заданный символ с начала (или с конца), или также найти заданную подстроку (если она есть).

Первую задачу выполняют функции 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; просмотров: 631;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.