Cout << "This is a string";

Cout << "This is a string";

Matvey Seregin

Привет! Сегодня мы поговорим о строках, а также немного затронем таблицу ASCII и escape-последовательности (управляющие символы).

Строка - это тип данных, позволяющий хранить любую последовательность различных символов. Для того, чтобы использовать класс string, объявлять строковый тип данных и использовать строковые методы, нужно подключить заголовочный файл <string>.


Прежде всего стоит знать, что под капотом у строки находится массив char'ов (символьных элементов). При этом важно помнить, что в конце такого массива всегда находится так называемый нуль-терминатор '\0'. Он позволяет компилятору понять, в каком месте строка заканчивается. Например, мы можем представить строку "hello" в виде массива char'ов - ['h', 'e', 'l', 'l', 'o', '\0']:

Строка в виде массива символов


Над строками можно выполнять некоторые операции, например складывать (это называется конкатенацией строк), проверять на равенство или посимвольно сравнивать.

Конкатенация строк


Оператор == проверяет, совпадают ли все символы первой и второй строки, и в таком случае возвращает true.

Сравнение строк, ==


Операторы >, >=, <, <= поочередно сравнивают символы обеих строк по кодам этих символов в таблице ASCII. Что это такое? ASCII - название таблицы, в которой символам сопоставлены числовые коды. Она стандартизирована; например, буква "f" в числовом эквиваленте в соответствии с таблицей всегда будет интерпретироваться как 102, а, например, символ "@" как 64, вне зависимости от вашей операционной системы, языка, на котором вы пишете программу или чего-либо еще.

Таблица ASCII


Таким образом, если мы сравниваем строки "Aboba" и "Hello", то строка "Aboba" будет считаться меньшей, потому что "A" в таблице ASCII имеет меньший код, чем "H".

Сравнение различных строк


В случае, если начало строк одинаковое, то сравнение останавливается на первом отличающемся символе. Например:

Сравнение строк с одинаковым началом


(s1 > s2) возвращает false, потому что пятый символ у строк разный, при том символ "a" в ASCII идет раньше, чем символ "u", значит первая строка меньше.


Немного про ввод строк: cin по стандарту читает первое введенное в консоль слово, потому что он останавливается на пробеле. Если нам нужно считать строку с пробелами, то нужно использовать getline. Первым параметром он принимает поток ввода (cin), а вторым - строку, в которую нужно записать значение.

getline vs cin


Также пара слов об escape-последовательностях (управляющих символов). Это символы, предназначенные для форматирования вывода, например '\t' (табуляция), '\n' (перенос строки) - наиболее часто используемые. Несмотря на то, что они, казалось бы, состоят из двух символов, на самом деле они считаются за один: их можно вместить в переменную типа char. Вот пример, как можно такие символы использовать:

Использование \t (табуляции)


У строк существует большое количество полезных методов, например size() - возвращает длину строки (без нуля-терминатора, все как у обычных людей), insert() - вставляет указанный символ по указанному индексу, replace() - заменяет указанную часть строки, и многие-многие другие. Можете ознакомиться подробнее в документации.


Ключевые моменты:

  • Строка - это массив char'ов;
  • Строка в виде массива char'ов в конце всегда имеет терминальный нуль;
  • Сложение строк называется конкатенацией;
  • В строках сравниваются коды символов в ASCII;
  • Для ввода строки с учетом пробелов стоит использовать getline;
  • Для форматирования вывода иногда удобно использовать escape-последовательности.


Вы великолепны! :D

Не бойтесь трудностей в процессе обучения, это абсолютно нормально. Если у вас есть какие-то вопросы по статье или предложения по улучшению ее качества, мы всегда рады обратной связи.

С ув. ваш TechMentor.

Report Page