Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
17.04.2015
Размер:
53.1 Кб
Скачать

10. Стандартная библиотека обработки строк.

Имеются две группы функций, оперирующих со строками. Они определены в заголовочном файле<string.h>. Имена функций первой группы начинаются с буквstr, второй - сmem. Если копирование имеет дело с объектами, перекрывающимися по памяти, то, за исключениемmemmove, поведение функций не определено. Функции сравнения рассматривают аргументы как массивы элементов типаunsigned char.

В таблице на с. 321 переменные sиtпринадлежат типуchar *,csиct– типуconst char *,n- типуsize_t, аc- значение типаint, приведенное к типуchar.

Последовательные вызовы strtokразбивают строкуsна лексемы. Ограничителем лексемы служит любой символ из строкиct. В первом вызове указательsне равен NULL. Функция находит в строкеsпервую лексему, состоящую из символов, не входящих вct; ее работа заканчивается тем, что поверх следующего символа пишется '\0' и возвращается указатель на лексему. Каждый последующий вызов, в котором указательsравен NULL, возвращает указатель на следующую лексему, которую функция будет искать сразу за концом предыдущей. Функцияstrtokвозвращает NULL, если далее никакой лексемы не обнаружено. Параметрctот вызова к вызову может варьироваться.

Здесь и ниже под такими выражениями как cs<ct не следует понимать арифметическое сравнение указателей. Подразумевается лексикографическое сравнение, т. е. csменьше (больше)ct, если первый несовпавший элемент вcsарифметически меньше (больше) соответствующего элемента изct.

char *strcpy(s,ct)

копирует строку ctв строкуs, включая '\0'; возвращаетs

char *strncpy(s,ct,n)

копирует не более nсимволов строкиctвs; возвращаетs. Дополняет результат символами '\0', если символов вctменьшеn

char *strcat(s,ct)

приписывает ctкs; возвращаетs

char *strncat(s,ct,n)

приписывает не более nсимволовctкs, завершаяsсимволом '\0'; возвращаетs

char strcmp(cs,st)

сравнивает csиct; возвращает <0, если cs<ct; 0, если cs==ct; и >0, если cs>ct (I.B.: вообще-то, функция возвращает int)

char strncmp(cs,ct)

сравнивает не более nсимволовcsиct; возвращает <0, если cs<ct, 0, если cs==ct, и >0, если cs>ct (I.B.: тоже int должна возвращать)

char *strchr(cs,c)

возвращает указатель на первое вхождение cвcsили, если такового не оказалось, NULL

char *strrchr(cs,c)

возвращает указатель на последнее вхождение cвcsили, если такового не оказалось, NULL

size_t strspn(cs,ct)

возвращает длину начального сегмента cs, состоящего из символов, входящих в строкуct

size_t strcspn(cs,ct)

возвращает длину начального сегмента cs, состоящего из символов, не входящих в строкуct

char *strpbrk(cs,ct)

возвращает указатель в csна первый символ, который совпал с одним из символов, входящих вct, или, если такового не оказалось, NULL

char *strstr(cs, ct)

возвращает указатель на первое вхождение ctвcsили, если такового не оказалось, NULL

size_t strlen(cs)

возвращает длину cs

char * strerror(n)

возвращает указатель на зависящую от реализации строку, соответствующую номеру ошибки n

char * strtok(s, ct)

strtokищет вsлексему, ограниченную символами изct; более подробное описание этой функции см. ниже

Функции mem...предназначены для манипулирования с объектами как с массивами символов; их назначение - получить интерфейсы к эффективным программам. В приведенной ниже таблицеsиtпринадлежат типуvoid *;csиct- типуconst void *;n- типуsize_t; аcимеет значение типаint, приведенное к типуchar.

void *memcpy(s,ct, n)

копирует nсимволов изctвsи возвращаетs

void *memmove(s,ct,n)

делает то же самое, что и memcpy, но работает и в случае "перекрывающихся" объектов.

int memcmp(cs, ct, n)

сравнивает первые nсимволовcsиct; выдает тот же результат, что и функцияstrcmp

void *memchr(cs, c, n)

возвращает указатель на первое вхождение символа cвcsили, если среди первыхnсимволовcне встретилось, NULL

void *memset(s, c, n)

размещает символ cв первыхnпозициях строкиsи возвращаетs

Вопросы для самопроверки.

  1. Символьные массивы.

  2. Указатели на символьные массивы.

  3. Символьные строки

  4. Ввод вывод строк.

  5. Строки в функциях.

  6. Массивы строк.

  7. Стандартная библиотека для работы со строками.