Класс string для работы со строками в С++
Итак, представление строк с помощью символьного массива с завершающим нулевым символом позволяет достичь высокой эффективности, однако, такой способ содержит ряд неудобств и является небезопасным, поскольку не предоставляет механизма проверки выхода за границы массива.
Применение библиотечного класса string дает возможность обрабатывать строки посредством С++ операторов и не задумываться о безопасности.
Для использования объектов класса string в С++ программах необходимо подключить заголовочный файл <string> (#include <string>).
Способы инициализации объекта класса string
Существует несколько способов инициализации объектов класса string. Наиболее часто встречаемые:
- string s1; – пустая строка
- string s2 (s1); - инициализация строки s2 как копии строки s1
- string s3 ("value string"); - инициализация строки s3 как копии строкового литерала
- string s4 (n, 'b') - инициализация строки s4 последовательностью из n символов b
Применение функции getline() для чтения целой строки
Чтобы прочитать строку, содержащую пробельные символы, в класс string добавлена вспомогательная функция ввода-вывода getline(), которая принимает поток ввода и строковую переменную. Пример фрагмента программы:
- string s;
- getline(cin, s);
- cout << s;
Операции допустимые для объектов класса string
Для работы со строками целиком применяются следующие операции:
- сравнения: ==, !=, >, >=, <, <=
- присваивания: =
- конкатенация: +
- присваивания с конкатенацией: +=
- индексация: [ ]
- ввод: >>
- вывод: <<
Рассмотрим фрагмент программы, демонстрирующий пример сравнения строк целиком. Для этих целей будем использовать операции отношения:
- string s("abce");
- string s1("abcd");
- s1 += s; // Теперь в s1 - abcdabce
- bool result = s > s1;
- cout << result;
Результат работы программы: 1, т.е. значение логической переменной result – true (ИСТИНА).
Сравнение строк происходит посимвольно с учетом регистра, при этом действуют следующие правила:
- если две строки имеют разную длину и, при этом, каждый символ короткой строки равен соответствующему символу длиной строки, то короткая строка меньше длиной;
- если две строки отличаются символами, то результат сравнения определяется первым несовпадающим символом.
Методы (функции) для обработки частей строк
Для работы с частями строк класс string содержит разнообразные методы (функции). Для удобства их можно разбить на следующие категории:
- присваивание и добавление частей строк;
- преобразования строк;
- поиск подстрок;
- сравнение;
- получение характеристик строк.
Рассмотрим пример обработки строк с использованием перечисленных категорий:
Задача: Программа регистрации принимает данные в формате Фамилия Имя. Пользователь оказался невнимательным и перепутал порядок ввода. Напишите программу, исправляющую данную ошибку. Результат запишите в новую строку.
Листинг возможного варианта программы:
Комментарии инструкций в отдельных строках:
- 2: подключение заголовочного файла #include <string>
- 10: в переменную space записываем номер позиции пробела слева.
- 11: присваиваем строке s1 часть строки s, начиная с позиции space+1 длиной s.length()-space, где s.length() - длина строки, space+1 – номер первого символа после пробела, s.length()-space – "длина" второго слова
- 12: добавляем к концу строки s1 часть первое слово ( часть строки s начиная с позиции 0, длиной space)
- 13: вставляем в строку s1 пробел из строки s