Символы строки
Строка std::string — не вектор, но во многом на него похожа: это последовательность символов. У каждого символа есть индекс, который считается от 0, и читать его можно с помощью квадратных скобок или метода at():
std::string word = "Code";
std::cout << word[0] << std::endl;
std::cout << word.at(1) << std::endl;
std::cout << word[word.size() - 1] << std::endl;Программа выведет:
C
o
eВ C++ у одного символа есть собственный тип данных, char, который вы знаете из урока о переменных. Поэтому символ, прочитанный из строки, можно сохранить в переменной char. Значение char пишется в одинарных кавычках, 'C', а строка — в двойных, "C". std::cout выводит символ без кавычек:
char firstChar = word[0];
std::cout << firstChar << std::endl;
if (firstChar == 'C') {
std::cout << "Начинается с C" << std::endl;
}Программа выведет:
C
Начинается с CЧастая ошибка — сравнивать символ со строкой в двойных кавычках: if (word[0] == "C"). Тогда программа не скомпилируется:
main.cpp:7:17: error: comparison between pointer and integer ('value_type' (aka 'char') and 'const char *')В сообщении говорится о сравнении указателя с целым числом. С указателями вы познакомитесь в уроке о ссылках и указателях. Пока запомните: если вы видите эту ошибку при работе с символом, замените двойные кавычки одинарными.
Число символов вы получаете с помощью метода size(), как и для вектора. У строки есть и метод length(), который возвращает то же число. Пробелы и знаки препинания — тоже символы, поэтому в "Hi, Tom!" 8 символов:
std::string greeting = "Hi, Tom!";
std::cout << greeting.size() << " " << greeting.length() << std::endl;Программа выведет:
8 8Индекс за пределами строки работает так же, как с вектором: word[10] читает что-то бессмысленное, а word.at(10) останавливает программу с ошибкой.
Символ строки можно и изменить:
std::string name = "Tim";
name[0] = 'J';
std::cout << name << std::endl;Программа выведет:
JimОсторожно с русскими буквами и буквами с диакритическими знаками, такими как é или ü. В строке они занимают два байта, то есть два char (так кодировка UTF-8 хранит текст). Поэтому у строки "кот" размер 6, а не 3, а её последний char — лишь половина буквы т. Выводить такие строки можно без проблем, но тексты, с которыми вы работаете посимвольно, пишите латиницей и без диакритических знаков. Поэтому в упражнениях этого урока имена записаны латиницей.
Задание
- 1
Сохраните первый символ строки
nameв переменнойfirstCharтипаchar. Можно использовать квадратные скобки или методat(). - 2
В одной строке выведите первый символ, последний символ и число символов имени, разделяя их пробелами. Последний символ найдите с помощью
size() - 1илиlength() - 1. В выводе должна быть строкаT a 4. - 3
Ниже напишите инструкцию, которая меняет первый символ имени на
'N', а затем выведите имя. В выводе должна быть строкаNina.