Можно и нужно стандартную библиотеку языка 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
.
Дана строка (считывается при помощи getline). Если в этой строке есть символ @
,
то выведите YES
, иначе выведите NO
.
Используйте метод find
, для поиска символа в строке.
Ввод | Вывод |
---|---|
email@179.ru |
YES |
Дана строка (считывается при помощи getline). Если в этой строке есть заглавная или строчная гласная буква
(A, O, I, U, E, Y) то выведите YES
, иначе выведите NO
.
Используйте метод find_first_of
, для поиска гласной в данной строке.
Ввод | Вывод |
---|---|
Hmmm... |
NO |
Подсчитайте, сколько раз в данной строке встречается символ @.
Указание: используйте метод find
, запоминая последнюю позицию найденного символа @
и продолжая поиск только с этой позиции. Подсчитывайте количество успешно завершенных
поисков.
Примечание: решения, в которых на каждом шаге метод find
вызывается дважды, приниматься не будут.
Ввод | Вывод |
---|---|
email@179.ru |
1 |
Подсчитайте количество заглавных и строчных гласных букв в данной строке.
Воспользуйтесь предыдущей задачей, заменив метод find
на find_first_of
.
Ввод | Вывод |
---|---|
We All Live In The Yellow Submarine! |
13 |
Даны две строки (с пробелами). Выведите YES
, если вторая
строка встречается внутри первой, иначе выведите NO
.
Ввод | Вывод |
---|---|
We All Live In The Yellow Submarine |
YES |
Даны две строки. Подсчитайте, сколько раз вторая строка встречается в первой, как ее подстрока. “Пересекающиеся” вхождения считаются несколько раз.
Ввод | Вывод |
---|---|
ABABA |
2 |
Даны две строки. Определите, можно ли из первой строки удалить несколько символов так, чтобы получилась вторая строка. Выведите YES
или NO
.
Ввод | Вывод |
---|---|
Program |
YES |
Program |
NO |
После запятой в тексте должен строять пробел. Дана строка, вставкой пробелов в неё добейтесь выполнения этого правила. Не надо вставлять пробел, если он там уже есть.
Ввод | Вывод |
---|---|
Question of Life,The Universe, and Everything |
Question of Life, The Universe, and Everything |
Дана строка. Продублируйте в ней все гласные буквы.
Ввод | Вывод |
---|---|
Question of Life, The Universe, and Everything |
Quueestiioon oof Liifee, Thee UUniiveersee, aand EEveeryythiing |
Дана строка (считывается при помощи getline). Удалите из нее все символы @
,
находя их при помощи метода find
и удаляя их при помощи метода erase
.
Не забывайте, что поиск нужно продолжать с места последнего нахождения данного символа, а не с начала строки!
Ввод | Вывод |
---|---|
Bilbo.Baggins@bagend.hobbiton.shire.me |
Bilbo.Bagginsbagend.hobbiton.shire.me |
Удалите из заданной строки все гласные буквы.
Ввод | Вывод |
---|---|
We All Live In The Yellow Submarine! |
W ll Lv n Th llw Sbmrn! |
Даны две строки. Удалите из первой строки все вхождения данного слова. После удаления слова поиск следующего вхождения начинается со следующего символа за удаленным словом (то есть если в результате удаления слова образуется еще одно такое же слово, то его удалять не надо).
Ввод | Вывод |
---|---|
AABCBC |
ABC |