Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 3).doc
Скачиваний:
140
Добавлен:
15.04.2015
Размер:
1.34 Mб
Скачать

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

Библиотека Си содержит несколько функций, позволяющих выполнять поиск в строках. Всего таких функций шесть, и все они объявлены в заголовочном файле string, h:

  • strchr()

  • strrchr()

  • strcspn()

  • strspn()

  • strpbrk()

  • strstr()

Функция strchr()

Функция strchr() обнаруживает первое вхождение заданного символа в заданной строке. Она имеет следующий прототип:

char *strchr(const char *str, int ch);

Функция strchr() выполняет поиск в строке str слева направо, пока не найдет символ ch или пока строка не закончится нулевым символом.

Если символ ch найден, функция возвра­щает указатель на него, а в противном случае — NULL.

Итак, когда функция strchr() находит символ, она возвращает указатель (адрес) этого символа. Зная, что str указывает на первый символ в строке, можно вычислить положение искомого символа, отняв str от возвращенного функцией значения.

Функция strrchr()

Библиотечная функция strrchr() по своему назначению идентична функции strchr(), c тем исключением, что она разыскивает последнее вхождение заданного символа в строку.

Она имеет следующий прототип:

char *strrchr(const char *str, int ch);

Функция strstr()

Эта функция ищет первое появление одной строки внутри другой, причем всей строки сразу, а не ее отдельных символов. Функция имеет следующий прототип:

char *strstr(const char *str1, const char *str2);

Функция strstr() возвращает указатель на первую позицию, с которой начинается строка str2 внутри строки strl. Если между строками нет такого соответствия, функция воз­вращает NULL.

Если вторая строка имеет длину 0, функция возвращает указатель str1.

Найдя место вхождения одной строки в другую, можно вычислить смещение str2 относительно на­чала str1 с помощью вычитания указателей, как в случае с strchr().

Помните, что у многих функций Си для работы со строками имеются аналоги, которые работают с фрагментами строк заданной длины. Такие функции, принимающие длину фрагмента как один из своих аргументов, обычно имеют имена типа strnxxx(), где символы ххх зависят от конкретной функции.

Преобразования символов в строках

Во многих библиотеках Си имеются две функции для изменения регистра символов внутри строки. Эти функции не определены в стандарте ANSI, но есть в различных компиляторах в том или ином виде. Например в их прототипы содержатся в iфайле string.h для компилятора Microsoft С:

char *strlwr(char *str);

char *strupr(char *str);

Функция strlwr() преобразует все буквенные символы строки str в нижний регистр,

функция strupr() делает прямо противоположное — преобразует все буквы в верхний регистр. Символы, не являющиеся буквами, не подвергаются никакому изменению.

Обе функции возвращают указатель str. Обратите внимание, что эти функции не создают новых строк, а выполняют преобразования в уже существующих.

Другие функции для работы со строками

Рассмотрим несколько функций для различных операций со строками, не подпадающих ни -под одну из рассмотренных ранее категорий. Все они определены заголовочном файле string.h:

  • strrev()

  • strset()

  • strnset()

Функция strrev()

Функция strrev() изменяет порядок следования символов в строке на противоположный.

Она имеет следующий прототип:

char *strrev(char *str);

В результате ее вызова все символы в строке str выстраиваются в порядке, противоположном исходному. Завершающий нулевой символ, конечно, остается там же, где был - в конце строки. Функция возвращает указатель str.

Функции strset() и strnset()

Эти функции, как и предыдущая, не входят в стандартную библиотеку ANSI Си. Функция strset() заменяет все символы (a strnset() — указанное количество символов) на один тот же заданный символ.

Их прототипы имеют вид:

char *strset(char *str, int ch);

char *strnset(char *str, int ch, size_t n);

Функция strset() заменяет все символы в строке str, за исключением завершающего нулевого, на символ ch.

Функция strset() заменяет первые n символов строки.

Если n больше или равно strlen(str), то strnset() заменяет все символы в строке str.