Операции со строками в STL

Можно и нужно стандартную библиотеку языка C++ STL (Standard template library).

Для прочтения рекомендуется следующий раздел сайта www.cppreference.com.

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

Строки можно считывать двумя способами: до пробельного символа (пробела, конца строки, символа табуляции) при помощи конструкции cin >> S, и до конца строки при помощи функции getline(cin, S).

Арифметические операторы

Со строками можно выполнять следующие арифметические операции:
= - присваивание значения.
+= - добавление в конец строки другой строки или символа.
+ - конкатенация двух строк, конкатенация строки и символа.
==, != - посимвольное сравнение.
<, >, <=, >= - лексикографическое сравнение.

Подробней об операторах для строк читайте здесь.

Конструкторы

Строки можно создавать с использованием следующих конструкторов:
string() - конструктор по умолчанию (без параметров) создает пустую строку.
string(string & S) - копия строки S
string(int n, char c) - повторение символа c заданное число n раз.
string(char c) - строка из одного символа c.
string(string & S, int start, int len) - строка, содержащая не более, чем len символов данной строки S, начиная с символа номер start.

Конструкторы можно вызывать явно, например, так:

S += string(10, 'z');

В этом примере явно вызывается конструктор string для создания строки, состоящей из 10 символов 'z'.

Неявно конструктор вызывается при объявлении строки с указанием дополнительных параметров. Например, так:

string S(10, 'z');

Подробней о конструкторах для строк читайте здесь.

Методы для строк

Методом называется функция, которая применяется к объекту, например, строке. При вызове метода его имя пишется после идентификатора объекта через точку, например, у объекта типа string есть метод size, возвращающий длину строки. Если S — это строка, то метод вызывается так: S.size(). Другой пример: метод substr возвращает подстроку заданной строки:

string S = "Hello, world!";
cout << S.substr(6, 5) << endl;

В данном случае будет выведен текст world.

Вот список полезных методов, применяемых к строкам:
appendдобавляет строку или символы к строке
assignприсваивает строке значение строк символов или других строк C++
clearудаляет все символы из строки
compareсравнивает две строки
emptyвозвращает true если в строке нет символов
eraseудаляет символы из строки
findищет символы в строке
find_first_not_ofнаходит первый символ, отличный от
find_first_ofнаходит первый символ схожий с
find_last_not_ofнаходит последний символ, отличный от
find_last_ofнаходит последний символ, схожий с
insertвставляет символы в строку
lengthвозвращает длину строки
nposспециальное значение, означающее «не найдено» или «все оставшиеся символы»
push_backдобавляет символ в конец строки
replaceзаменяет символы в строке
resizeменяет размер строки
rfindнаходит последнее вхождение подстроки
sizeвозвращает количество символов в строке
substrвозвращает определённую подстроку
swapменяет две строки содержимым

Для обозначения того, что запрашиваемая последовательность символов не найдена, многие методы (например, find) возвращают специальную константу string::npos.

Упражнения

A: Есть ли символ @

Дана строка (считывается при помощи getline). Если в этой строке есть символ @, то выведите YES, иначе выведите NO.

Используйте метод find, для поиска символа в строке.
Ввод Вывод
email@179.ru
YES

B: Есть ли гласная

Дана строка (считывается при помощи getline). Если в этой строке есть заглавная или строчная гласная буква (A, O, I, U, E, Y) то выведите YES, иначе выведите NO.

Используйте метод find_first_of, для поиска гласной в данной строке.
Ввод Вывод
Hmmm...
NO

C: Подсчитайте количество символов @

Подсчитайте, сколько раз в данной строке встречается символ @.

Указание: используйте метод find, запоминая последнюю позицию найденного символа @ и продолжая поиск только с этой позиции. Подсчитывайте количество успешно завершенных поисков.

Примечание: решения, в которых на каждом шаге метод find вызывается дважды, приниматься не будут.
Ввод Вывод
email@179.ru
1

D: Подсчитайте количество гласных

Подсчитайте количество заглавных и строчных гласных букв в данной строке. Воспользуйтесь предыдущей задачей, заменив метод find на find_first_of.
Ввод Вывод
We All Live In The Yellow Submarine!
13

E: Поиск подстроки

Даны две строки (с пробелами). Выведите YES, если вторая строка встречается внутри первой, иначе выведите NO.
Ввод Вывод
We All Live In The Yellow Submarine
low
YES

F: Сколько раз одна подстрока находится внутри другой?

Даны две строки. Подсчитайте, сколько раз вторая строка встречается в первой, как ее подстрока. “Пересекающиеся” вхождения считаются несколько раз.
Ввод Вывод
ABABA
ABA
2

G: Вычеркнуть буквы

Даны две строки. Определите, можно ли из первой строки удалить несколько символов так, чтобы получилась вторая строка. Выведите YES или NO.
Ввод Вывод
Program
ram
YES
Program
prog
NO

H: Пробелы после запятой

После запятой в тексте должен строять пробел. Дана строка, вставкой пробелов в неё добейтесь выполнения этого правила. Не надо вставлять пробел, если он там уже есть.
Ввод Вывод
Question of Life,The Universe, and Everything
Question of Life, The Universe, and Everything

I: Продублировать гласные буквы

Дана строка. Продублируйте в ней все гласные буквы.
Ввод Вывод
Question of Life, The Universe, and Everything
Quueestiioon oof Liifee, Thee UUniiveersee, aand EEveeryythiing

J: Удалите все символы @

Дана строка (считывается при помощи getline). Удалите из нее все символы @, находя их при помощи метода find и удаляя их при помощи метода erase.

Не забывайте, что поиск нужно продолжать с места последнего нахождения данного символа, а не с начала строки!
Ввод Вывод
Bilbo.Baggins@bagend.hobbiton.shire.me
Bilbo.Bagginsbagend.hobbiton.shire.me

K: Удалите все гласные буквы

Удалите из заданной строки все гласные буквы.
Ввод Вывод
We All Live In The Yellow Submarine!
W ll Lv n Th llw Sbmrn!

L: Удалить все вхождения слова

Даны две строки. Удалите из первой строки все вхождения данного слова. После удаления слова поиск следующего вхождения начинается со следующего символа за удаленным словом (то есть если в результате удаления слова образуется еще одно такое же слово, то его удалять не надо).
Ввод Вывод
AABCBC
ABC
ABC