Урок #7

Работа со строками

Инициализация строк

Кроме массивов, которые содержат данные обычных числовых форматов, так же существуют и массивы символов. Эти массивы содержат элементы типа char. То есть массив, в котором находится слово London будет таков: char londonArr[] {'L', 'o', 'n', 'd', 'o', 'n'}. В C++ есть стандартная библиотека string.h, которая имеет в себе множество функций для работы со строками. Строка же в свою очередь — это тот же массив символов, но последний его элемент — нулевой символ, символ окончания строки. Он записывается так: \0. Значит, для корректной записи массива londonArr и его дальнейшего использования в программе как строки, следует добавить в конце нулевой символ. Теперь его инициализация будет выглядеть так: londonArr[] {'L', 'o', 'n', 'd', 'o', 'n', '\0'}. Вас может удивить то, что последовательность символов \0 взята в одинарные кавычки, в то время, как эти кавычки могут содержать лишь один символ. Но последовательность \0 обозначает только один символ. Точно такая же ситуация с символами \t (табуляции), \n (перевод строки) и т. д.

Способ инициализации строки по символам оказался слегка неудобным, поэтому в C++ есть более практичная форма записи: londonArr[] {"London"}. В данном случае компилятор видит литерал "London" как строку, поэтому сам распределит символы в отдельные элементы массива, а так же в конец вставит нулевой символ.

Ввод и вывод строк

Уже хорошо знакомые нам функции ввода и вывода так же умеют работать и со строками. Только есть некоторая особенность: функция cin считывает строку до первого пробела. cout в данном случае выводит строку полностью, даже если нам удастся засунуть пробелы в строку. Но есть и другое неудобство в использовании cin. Эта функция может считать сколько угодно символов, а затем попытается запихнуть в созданный массив, а данный поток данных просто не поместится. Проблема в том, что количество элементов массива задается константой или литералом, а считанное множество символов может в несколько раз превышать размер массива. Что бы полностью избавиться от этих проблем, для считывания строки будем пользоваться функцией getline, которая как бы расширяет возможности функции cin. Записывается это так: cin.getline(str, numOfChars). str — считывания строка, numOfChars — максимально возможное количество символов, которое будет считано. Рассмотрим программу ниже:

Cat
Amazing Cat
Cat
Amazing C
Для продолжения нажмите любую клавишу…

Как видно из примера, первая строка имеет длину в 4 символа и она полностью помещается в массив из десяти элементов. Вторая же строка имеет аж 12 символов, вместе с символом окончания строки. Последние два символа a и t «отрезались» и к строке в 9 символов (Amazing C) так же присоединился десятый символ \0.

Функции для работы со строками

Работа со строками требует подключения библиотеки string. Ниже приведена таблица функций, которые понадобятся нам в процессе написания программы.

Название функции Описание
strlen(str) Определяет длину строки без нулевого символа
strcpy(str1, str2) Копирует строку str2 в строку str1
strncpy(str1, str2, n) Копирует n символов из строки str2 в строку str1
strcat(str1, str2) Объединяет строку str2 и str1 в строку str1
strncat(str1, str2, n) Объединяет n символов из строки str2 со строкой str1 и сохраняет результат в строке str1
strcmp(str1, str2) Сравнивает строки и возвращает 0, если строки одинаковы, <0, если str1 > str2, >0, если str1 < str2. Функция работает с учетом регистра. (Функция stricmp для сравнивания без учета регистра)
strncmp(str1, str2) Сравнивает n символов строки str1 со строкой str2 и возвращает 0, если строки одинаковы, <0, если str1 > str2, >0, если str1 < str2. Функция работает с учетом регистра. (Функция strnicmp для сравнивания без учета регистра)
strchr(str, ch) Выполняет поиск символа ch в строке str и возвращает указатель на первое вхождение данного символа в строке. Если символ не найден, функция возвращает ноль.
strspn(str1, str2) Возвращает длину первой части строки str1, содержащая символы, которые есть с строке str2
strcspn(str1, str2) Возвращает длину первой части строки str1, содержащая символы, которых нет в строке str2
atof(str) Преобразует строку str в число типа double (long float)
atoi(str) Преобразует строку str в число типа int
atol(str) Преобразует строку str в число типа long int

Функции для работы с символами

Название функции Описание
isalnum(ch) Возвращает true, если ch является буквой или цифрой
isalpha(ch) Возвращает true, если ch является буквой
islower(ch) Возвращает true, если ch является буквой нижнего регистра
isupper(ch) Возвращает true, если ch является буквой верхнего регистра
isdigit(ch) Возвращает true, если ch является цифрой
isspace(ch) Возвращает true, если ch является пробелом
toupper(ch) Возвращает символ ch в верхнем регистре

Тип string

В C++ так же есть тип для строк — string. Он находится в библиотеке cstring и представляет собой более удобную работу со строками. Объекты типа string можно считывать и выводить стандартными функциями ввода и вывода. Так же как и с обычными строками, новые строки считываются до первого пробела, или до конца строки. Интересно то, что данные строки можно конкантенировать при помощи знака + (плюс).

Возможные вопросы по теме:

Вопросов еще нет

Добавляйте свои вопросы в комментарии. Лучшие попадут в статью 🙂


Урок #6 Урок #8