Класс 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