Строки
Прежде чем пользоваться строковыми операциями и вообще иметь возможность описывать переменные типа string необходимо включить в заголовок программы описание:
Также во всех примерах предполагается, что в начале программы подключено пространство имен std:
Описание строки полностью аналогично описанию любой другой переменной. Например:
Над строками возможны следующие операции:
- Присваивание
- Сравнение
- Ввод
- Запрос длины строки (size, length)
- Соединение (+)
- Удаление фрагмента (erase)
- Вставка фрагмента (insert)
- Копирование фрагмента (substr)
- Поиск фрагмента (find)
- Преобразование к числу (sscanf, sstream)
- Преобразование числа к строке (sprintf, sstream)
- Строка как массив символов
- Примечание(*)
Присваивание строк
Примеры с комментариями:
Помимо этого возможно вот такое присваивание:
Сравнение строк
Две строки равны друг другу, если у них одинаковые длины и символы на соответствующих местах полностью совпадают (то есть 1-й символ строки A равен 1-му символу строки B, 2-й символ строки A равен 2-му символу строки B и так далее)
Например строка "abc" равна строке "abc", но не равна строке "abcd".
Выяснение какая из строк больше выполняется посимвольно, аналогично алфавитному порядку русского языка. Если строка начинается с символа, чей код больше, что и сама строка больше. Если первые символы одинаковы, то сравниваются вторые символы по тому же правилу. Если и они одинаковы, сравниваются третьи и так далее. Если в процессе сравнения какая-то из строк закончилась, то она меньше другой.
Строку также можно сравнивать с пустой (обозначается двумя кавычками подряд, без пробелов).
Ввод строк
Для ввода строк рекомендуется использовать функцию getline(). Данная функция читает строку целиком (с пробелами и прочими символами) до знака перевода строки.
Пример:
Длина строки
Функции size() или length() возвращают целое число - количество символов, которое сейчас находится в строке.
Пример:
Пример:
Соединение строк
Операция + возвращает строку, получившуюся в результате соединения (дописывания одной строки после конца другой) одной или более строк. Строки соединяются в том порядке, как они указаны в операции.
Пример:
Удаление фрагмента
Функция erase() удаляет указанный фрагмент строки (если это возможно). Первым параметром указывается начальный символ (с него начнется удаление), вторым - количество символов. Символы в строке нумеруются, начиная с 0.
Пример:
Пример:
Вставка фрагмента
С помощьью функции insert() можно добавить заданный фрагмент в любое место строки. Первым параметром функции является номер начальной позиции для фрагмента (нумерация начинается с 0), вторым - фрагмент. Функция изменяет исходную строку.
Пример:
Копирование фрагмента
Функция substr() возвращает фрагмент строки (который тоже является строкой). Первым параметром указывается номер начального символа, вторым - количество. Символы нумеруются, начиная с 0. Функция не оказывает влияния на исходную строку.
Пример:
Пример:
Поиск фрагмента
С помощью функции find() можно определить, встречается ли данный фрагмент в строке. Функция возвращает специальное значение string::npos, если фрагмент не найден или номер первого (начиная слева) места, откуда начинается подобный фрагмент
Пример:
Пример:
Пример:
Преобразование к числу
1. Ввод/вывод в stringstream. Требуется создать специальный поток ввода/вывода, который будет вводить или выводить данные в некоторый буффер в памяти. При этом операции будут сходны со стандартным вводом/выводом.
Пример:
2. Функция sscanf() (scan from string as fromatted). Данная функция также из обычного C (не C++) поэтому "умеет" работать только с символьными массивами. В грубом приближении у функции 3 параметра: символьный массив, строка формата и переменная (или переменные), куда следует поместить результаты преобразования.
Пример:
Преобразование числа к строке
1. Ввод/вывод в stringstream. Требуется создать специальный поток ввода/вывода, который будет вводить или выводить данные в некоторый буффер в памяти. При этом операции будут сходны со стандартным вводом/выводом.
Пример:
2. sprintf() (print formatted to string). Эта функция также является функцией из стандартного C, и тоже работает только с массивами из char). Параметры (вкратце): символьный массив, куда будет выведен результат, строка формата, данные.
Подробнее про строку формата см. например, здесь.
Пример:
Строка как массив символов
Строку можно рассматривать как массив символов и применять к ней методы работы, как с массивом.
Пример:
Примечание(*)
На самом деле, здесь представлены далеко не все функции работы со строками. Более того, некоторые функции, например find(), допускают разные способы использования с разным количеством и комбинациями параметров. Более подробно см. документацию по языку C++. Однако, для решения большинства задач перечисленных функций вполне достаточно.