Программирование >>  Структурное программирование 

1 ... 120 121 122 [ 123 ] 124 125 126 ... 342


5.12.2. Функции работы со строками из библиотеки обработки строк

Библиотека обработки строк обеспечивает много полезных функций для работы со строковыми данными, сравнения строк, поиска в строках символов и других подстрок, разметки строк (разделения строк на логические куски) и определения длины строк. В этом разделе представлены некоторые типовые функции работы со строками из библиотеки обработки строк (из стандартной библиотеки С). Сведения об этих функциях сведены в таблицу на рис. 5.29.

Заметим, что некоторые функции на рис. 5.29 имеют параметры с типом данных size t. Этот тип определяется в заголовочном файле stddef.h (из стандартной библиотеки С) как беззнаковый целый тип, такой, как unsigned int или unsigned long.

Типичная ошибка программирования 5.17

Забывают включить заголовочный файл <string.h> при использовании функций из библиотеки обработки строк.

Функция strcpy копирует свой второй аргумент - строку в свой первый аргумент - массив символов, который должен быть достаточно большим, йтобы хранить строку и ее завершающий нулевой символ, который также копируется. Функция strncpy эквивалентна strcpy за исключением того, что strncpy указывает количество символов, которое должно быть скопировано из строки в массив. Заметим, что функция strncpy не обязательно должна копировать завершающий нулевой символ своего второго аргумента; завершающий нулевой символ записывается только в том случае, если количество символов, которое должно быть скопировано, по крайней мере на один больше, чем длина строки. Например, если второй аргумент - test , завершающий нулевой символ записывается только в случае, если третий аргумент strncpy по меньшей мере равен 5 (четыре символа в test плюс один завершающий нулевой символ). Если третий аргумент больше пяти, завершающий нулевой символ добавляется к массиву до тех пор, пока не будет записано общее количество символов, указанное третьим аргументом.

Типичная ошибка программирования 5.18

Не добавляется завершающий нулевой символ к первому аргументу strncpy, когда третий аргумент меньше или равен длине ароки во втором аргументе.

Типичная ошибка программирования 5.15

Передача символа в качеаве аргумента функции, которая ожидает ароку. Типичная ошибка программирования 5.16

Передача строки в качеаве аргумента функции, которая ожидает символ.



char *strcpy(char *sl, const char *s2)

Копирует строку s2 в массив символов si. Возвращает значение si.

char *strncpy(char *sl, const char *s2, size t n)

Копирует не более n сиволов из строки s2 в массив символов si. Возвращает значение si.

char *strcat(char *sl, const char *s2)

Добавляет строку s2 к строке si. Первый символ строки s2 записывается поверх завершающего нулевого символа строки si. Возвращает значение si.

char *strncat(char *sl, const char *s2, size t n)

Добавляет не более n символов строки s2 в строку si. Первый символ из s2 записывается поверх завершающего нулевого символа в si. Возвращает значение si.

int stremp(const char *sl, const char *s2)

Сравнивает строки si и s2. Функция возвращает значение О, меньшее, чем О или большее, чем О, если si соответственно равна, меньше или больше, чем s2.

int stremp(const ehar *sl, const ehar *s2, size t n)

Сравнивает до п символов строки si со стокой s2. Функция возвращает значение О, меньшее, чем О или большее, чем О, если si соответственно равна, меньше или больше, чем s2.

char *strtok(char *sl, const char *s2)

Последовательность вызовов strtok разбивает строку si на лексемы - логические куски, такие, как слова в строке текста -разделенные символами, содержащимися в строке s2. Первый вызов содержит в качестве первого аргумента si, а последующие вызовы для продолжения обработки той же строки, содержат в качестве первого аргумента NULL. При каждом вызове возвращается указатель на текущую лексему. Если при вызове функции лексем больше нет, возвращается NULL.

size t strlen(eonst ehar *s)

Определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому символу.

Рис. 5.29. Функции работы со строками из библиотеки обработки строк

В программе на рис. 5.30 strcpy используется для копирования полной строки в массиве х в массив у и strncpy - для копирования первых 14 символов массива х в массив z. Нулевой символ (\0) добавляется в массив Z, потому что вызов strncpy в программе не записывает завершающий нулевой символ (третий аргумент меньше, чем длина строки второго аргумента).

Функция strcat добавляет свой второй аргумент - строку к своему первому аргументу - массиву символов, содержащему строку. Первый символ второго аргумента замещает нулевой символ (\0), который завершал строку в первом аргументе. Программист должен быть уверен, что массив, используемый для хранения первой строки, достаточно велик для того, чтобы хранить комбинацию первой строки, второй строки и завершающего нулевого символа (скопированного из второй строки). Функция strncat добавляет ука-

Прототип функции Описание функции



char x[ ] = Поздравляю Вас с днем рождения ; char у[35], Z[15];

cout << Строка в массиве х: << х << endl

Строка в массиве у: strcpy(х, у) endl; strncpy(z, X, 14); z[14] = \0 ;

cout << Строка в массиве z: z << endl; return 0;

Строка в массиве x: Поздравляю Вас с днем рождения Строка в массиве у: Поздравляю Вас с днем рояадения

LE.J Строка в массиве z: Поздравляю Вас

Рис. 5.30. Использование strcpy и strncpy

. Использование strcat и strncat.

f --.nclude <iostream.h>

ii tinclude <string.h>

4; M mainO

char si [25] = Счастливого ; char s2[ ] = Нового Года ; char s3[40] = ;

:.ТЛ cout si = si endl s2 = s2 endl;

cout << strcat(si, s2) = strcat(si, s2) endl;

cout strncat(s3, si, 12) = strncat(s3, si, 12)

endl;

i cout strcat (s3, si) = strcat (s3, si) endl;

return 0;

si = Счастливого t s2 = Нового Года

jft strcat (si, s2) = Счастливого Нового Года strncat(s3, si, 12) = Счастливого

strcat(s3, si) = Счастливого Счастливого Нового Года Рис. 5.31. Использование strcat и strncat

занное количество символов из второй строки в первую. К результату добавляется завершающий нулевой символ. Программа на рис. 5.31 демонстрирует функцию strcat и функцию strncat.

Использование strcpy и strncpy tinclude <iostreain.h> tinclude <string.h>



1 ... 120 121 122 [ 123 ] 124 125 126 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.147
При копировании материалов приветствуются ссылки.
Яндекс.Метрика