|
Программирование >> Структурное программирование
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>
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.147
При копировании материалов приветствуются ссылки. |