- •Лекция №10 Тема: Строки.
- •Функции работы со строками из библиотеки обработки строк
- •Пример 4.
- •Пример 5
- •Пример на многомерные динамические массивы
- •Указатели на функции
- •Пример №1
- •Результат выполнения программы:
- •Результат выполнения программы
- •Пример №3
- •Пример №2
- •Результаты выполнения программы
Функции работы со строками из библиотеки обработки строк
Рассмотрим некоторые типичные функции стандартной библиотеки 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.
Функция
int *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, char c);
Проверяет строку s на содержание символа хранящегося в c. Результатом функции является адрес первого вхождения символа c в строку s, то есть возвращается строка, которая начинается от первого вхождения заданного символа до конца строки 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; // На экране будет DEXYZ
else cout<<"Нет такой подстроки!";
Функция
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, char ch);
Заменяет ВСЕ символы в строке s на символ ch. Например,
char str[30] = "ABCDE";
cout<<strset(str, 'x'); // на экране будет xxxxx
Функция
char *strnset(char *s, char 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, который входит в стандартную библиотеку языка С++.
Работа со строками в С++. Примеры.
