В этом разделе мы познакомимся с некоторыми типичными функциями стандартной
библиотеки string.h. Это библиотека обработки строк, которая обеспечивает
много полезных функций для работы со строковыми данными, например, сравнение
строк, поиск в строках символов и других подстрок, разметку строк (разделение
строк на логические куски) и определение длины строки.
- Функция int strlen (const char* s); -
определяет длину строки s. Возвращает количество символов, предшествующих
завершающему нулевому символу. Обратите внимание, завершающий ноль-символ в
длину не включается. Например,
cout << strlen("Hello!"); // на экране будет 6
char *str = "one";
cout << strlen(str); // на экране будет 3
- Функция char *strcpy(char *s1, const char *s2);
- копирует строку s2 в массив символов s1. Возвращает значение s1.
Массив символов s1 должен быть достаточно большим, чтобы хранить строку и ее
завершающий нулевой символ, который также копируется. Например,
char str[25]; // объявляем символьный массив из 25 элементов
char *ps = new char [25]; /* объявляем указатель на символ и
динамически выделяем память под 25 символов */
strcpy(str, "ABCDE"); // копируем в str строковыю константу "ABCDE"
cout << str; // выводим str на экран. На экране будет ABCDE
strcpy(ps, "QWERTY"); // копируем в ps строковыю константу "QWERTY"
cout << ps; // выводим ps на экран. На экране будет QWERTY
delete[] ps; // освобождаем память
Обратите внимание, если Вы хотите, чтобы одна строка содержала другую, Вы
должны скопировать ее содержимое, а не присвоить! Так, например, в данном
случае инструкция ps = "QWERTY" была бы ошибочна. Компилятор, встречая такую
инструкцию, создают строку "QWERTY", за которой следует нулевой символ и
присваивает значение начального адреса этой строки (адреса символа Q) переменной
ps. Таким образом, теряется исходное значение ps, а значит невозможно корректно
освободить память под ps.
- Функция int *strcmp(const char *s1, const char *s2);
- сравнивает строки s1 и s2 (по ASCII-кодам). Функция возвращает
значение 0, если строки s1 и s2 равны, значение меньше ноля, если строка s1
меньше s2, и значение больше ноля, если s1 больше s2. Обратите внимание, строки
сравниваются не по длине, а посимвольно, по ASCII-кодам ( т.е. "g" больше "ff").
Например,
cout << strcmp("compare", "string"); /* на экране будет -1, поскольку
"compare" меньше "string" */
cout << strcmp("abcde", "abc"); /* на экране будет 1, поскольку
"abcde" больше "abc" */
cout << strcmp("one", "one"); /* на экране будет 0, поскольку
строки равны */
- Функция char *strcat(char *s1, const char
*s2); - добавляет строку s2 к строке s1. Первый символ строки s2
записывается поверх ноль-символа строки s1. Возвращает s1. Под s1 должно быть
выделено памяти не меньше чем (strlen(s1)+strlen(s2)+1). Например,
char st1[25] = "День";
cout << strcat(st1, " добрый!"); // на экране будет День добрый!
- Функция char *strncpy(char *s1, const char *s2, int
n); - копирует не болеее n символов строки s2 в массив символов s1.
Возвращает s1.
- Функция char *strncmp(char *s1, const char *s2, int
n); - сравнивает до n символов строки s1 со строкой s2. Возвращает 0,
меньше, чем 0 или больше, чем 0, если s1 соответственно равн, меньше или больше
s2.
- Функция char *strncat(char *s1, const char *s2, int
n); - присоединяет первые n символов строки s2 в строку s1.
Возвращает s1.
- Функция char *strchr(const char *s, int
c); - проверяет строку s на содержание символа хранящегося в
c. Результатом функции является адрес первого вхождения символа c
в строку s. Если символ не найден, возващается NULL. Например,
char str[20] = "ABCDEXYZ";
cout << strchr(str, 'X'); // на экране будет XYZ
или char str[20] = "ABCDEXYZ";
if (strchr(str, 'q') == NULL) cout << "Нет такого символа!";
- Функция char *strstr(const char *s1, const char
*s2); - проверяет строку s1 на содержание подстроки s2. Результатом
функции является адрес первого вхождения подстроки s2 в строку s1. Если
подстрока не найдена, возващается NULL. Например,
char str[20] = "ABCDEXYZ";
char *ps = strstr(str, "DEX");
if (ps != NULL)
cout << ps;
else
cout << "Нет такой подстроки!";
// На экране будет DEXYZ
- Функция char *strlwr(char *s); -
конвертирует строку к нижнему регистру (т.е. переводит строку в строчные
символы). Например,
char str[30] = "ABCDE_123_ijk_XYZ";
cout << strlwr(str);
// на экране будет abcde_123_ijk_xyz
- Функция char *strupr(char *s); -
конвертирует строку к верхнему регистру (т.е. переводит строку в прописные
символы).
- Функция char *strset(char *s, int ch); -
заменяет ВСЕ символы в строке s на символ ch. Например,
char str[30] = "ABCDE";
cout << strset(str, 'x'); // на экране будет xxxxx
- Функция char *strnset(char *s, int ch, int
n); - заменяет первые n символов в строке s на символ ch.
- Функция char *strrev(char *s); - меняет
порядок следования символов в строке на противоположный (меняет первый символ с
последним, второй символ с предпоследним и т.д.). Например,
char str[30] = "12345";
cout << strrev(str); // на экране будет 54321
Типичная ошибка программирования. Забывают
включить заголовочный файл string.h при использовании функций из
библиотеки обработки строк.
Также, мы хотим Вас познакомить с двумя функциями, которые могут помочь
программисту при чтении с клавиатуры символов:
Функция int getch(void); -
возвращает ASCII-код нажатой клавиши. Функция int getche(void); -
возвращает ASCII-код нажатой клавиши и выводит символ на экран.
Прототипы последних двух функций описаны в файле conio.h,
который входит в стандартную библиотеку языка С++. |