Символы и строки

Упражнения

A: ASCII-код символа

Считайте со стандартного ввода символ и выведите его ASCII-код. Решите эту задачу с использованием только одной переменной типа char.

Программа получает на вход один символ с ASCII кодом от 33 до 126.

Ввод Вывод
A
65

B: Символ с данным ASCII-кодом

Считайте со стандартного ввода целое число и выведите ASCII-символ с таким кодом. Решите эту задачу с использованием только одной переменной типа int.

Программа получает на вход число от 33 до 126.

Ввод Вывод
65
A

C: Таблица ASCII

Выведите все символы ASCII с кодами от 33 до 126 и их коды в следующем виде:

Вывод
! 33
" 34
# 35
...
} 125
~ 126

D: Символы в заданном интервале

Выведите подряд, без пробелов, все символы, лежащие в таблице ASCII между двумя заданными символами.

Программа получает на вход один символ с ASCII-кодом от 33 до 126, являющийся начальным символом интервала и число от 33 до 126, являющееся ASCII-кодом символа, завершающего интервал.

Ввод Вывод
A 68
ABCD
0 57
0123456789

E: is_digit

Для данного символа, считанного со стандартного ввода, проверьте, является ли он цифрой. Программа должна вывести слово YES, если символ является цифрой, или слово NO.

Решение оформите в виде функции bool is_digit(char c). В решении нельзя использовать циклы. В решении нельзя использовать константы с неочевидным значением типа 48 или 57.

Ввод Вывод
0
YES
A
NO

F: to_upper

Напишите функцию char to_upper(char c), которая переводит символ в верхний регистр, то есть для строчной буквы латинского алфавита возвращает сооветствующую заглавную букву латинского алфавита, а для остальных символов возвращает тот же символ.

Считайте один символ со стандартного ввода и переведите его в верхний регистр. В решении нельзя использовать циклы. В решении нельзя использовать константы с неочевидным значением.

Ввод Вывод
f
F
F
F
4
4

G: Сменить регистр символа

Напишите функцию char case_change(char c), меняющую регистр символа, то есть переводящую заглавные буквы в строчные, а строчные — в заглавные, остальные символы не меняющие.

Считайте один символ со стандартного ввода, выведите результат работы данной функции. В решении нельзя использовать циклы. В решении нельзя использовать константы с неочевидным значением.

Ввод Вывод
f
F
F
f
4
4

H: Нижний регистр

Дана строка, возможно, содержащая пробелы. Считайте эту строку и переведите все символы этой строки в нижний регистр. Решение оформите в виде функции void to_lower (string & S), получающей в качестве параметра строку по ссылке и изменяющая символы этой строки.

Для перевода одного символа в нижний регистр напишите отдельную функцию.

Ввод Вывод
Hello, world!
hello, world!

I: Проверить строки на равенство

Даны две строки (возможно, с пробелами). Проверьте, равны ли они. Если строки равны, выведите слово YES, если строки не равны, выведите слово NO.

Решение оформите в виде функции bool is_equal(const string &S1, const string & S2).

После того, как вы решите эту задачу, вам разрешается использовать оператор == для сравнения строк.

Ввод Вывод
Hi
HI
NO
Bye
Bye
YES

J: Конкатенация

Даны две строки, не содержащие пробелов. Выведите конкатенацию этих строк.

Решение оформите в виде функции string concat(const string & s1, const string & s2), получающей в качестве параметров две строки и возвращающей новую строку — их конкатенацию.

После того, как вы решите эту задачу, вам разрешается использовать оператор + для конкатенации строк.

Ввод Вывод
abcd
xyz
abcdxyz

K: Substr

Дана строка и параметры \(i\), \(k\). Напишите функцию, которая возвращает подстроку данной строки, начиная с символа с индексом \(i\) и длиной \(k\).

Решение оформите в виде функции string substr(const string & s, int i, int k).

Если \(i<0\), или \(i\ge s.size()\) или \(k<0\), то функция должна возвращать пустую строку.

Если \(i+k\ge s.size()\), то возвращается строка длиной \(s.size() - i\), то есть до конца строки.

Ввод Вывод
abcdefghijk
2 4
cdef
abcdefghijk
6 10000
ghijk

L: Erase

Дана строка и параметры \(i\), \(k\). Напишите функцию, которая удаляет из данной строки подстроку начиная с символа с индексом \(i\) и длиной \(k\).

Решение оформите в виде функции void erase(string & s, int i, int k), которая модифицирует данную строку, не возвращая значения.

Если \(i<0\), или \(i\ge s.size()\) или \(k<0\), то функция не модифицирует исходную строку.

Если \(i+k\ge s.size()\), то удаляются все символы начиная с \(i\)-го до конца строки.

Программа не должна использовать дополнительные вспомогательные строки.

Ввод Вывод
abcdefghijk
2 4
abghijk
abcdefghijk
6 10000
abcdef

M: Insert

Дана строка \(s\), параметр \(i\), другая строка \(t\). Напишите функцию, которая вставляет в данную строку \(s\) начиная с индекса \(i\) строку \(t\).

Решение оформите в виде функции void insert(string & s, int i, const string & t), которая модифицирует данную строку, не возвращая значения.

Если \(i<0\) или \(i\gt s.size()\), функция не модифицирует исходную строку.

Программа не должна использовать дополнительные вспомогательные строки.

Ввод Вывод
abcde
2
xyz
abxyzcde

N: Лексикографический порядок

Даны две строки. Если первая строка меньше второй в лексикографическом порядке, выведите слово less. Если первая строка больше — выведите слово greater. Если строки равны — выведите слово equal.

Решение оформите в виде функции... Операциями сравнения для строк в этой задаче пользоваться нельзя.

Ввод Вывод
banan
baobab
less

O: Извлечь цифры

Дана строка, возможно, содержащая пробелы. Извлеките из этой строки все символы, являющиеся цифрами и составьте из них новую строку. Решение оформите в виде функции string extract_digits (const string & S), получающей на вход исходную строку S и возвращающую новую строку, содержащую только цифры данной строки.

Указание. Заведите строку Answer, пройдите по всем символам данной строки, при обнаружении цифры добавляйте ее в конец строки Answer, увеличивая ее размер на 1. По завершении цикла верните значение Answer.

Ввод Вывод
2+2=4
224

P: Палиндром

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

Решение оформите в виде функции bool is_palindrome (const string & S). При решении этой задачи нельзя пользоваться вспомогательными массивами или строками.

Ввод Вывод
Radar
YES
YES
NO

Q: Значение выражения - 1

Дана строка, состоящая из n цифр, между которыми стоит n-1 знак операции, каждый из которых может быть либо +, либо -. Вычислите значение данного выражения.

Решение оформите в виде функции int evaluate(const string & S).

Ввод Вывод
1+2-3
0

R: StrToInt

Дана строка, содержащее запись в виде символов целого числа от 0 до 109-1. Определите значение этого числа в виде переменной int. Решение задачи оформите в виде функции int str_to_int(const string & S).

Функция main должна быть такой:

int main()
{
    string S;
    cin >> S;
    cout << StrToInt(S) << endl;
    return 0;
}

Ввод Вывод
179
179

S: IntToStr

Дана целое число от -109+1 до 109-1. Запишите это число в строку, то есть выполните преобразование, обратное предыдущей задаче (но только допускаются отрицательные числа).

Решение задачи оформите в виде функции string int_to_str(int n).

Функция main должна быть такой:

int main()
{
    int n;
    cin >> n;
    cout << IntToStr(n) << endl;
    return 0;
}

Ввод Вывод
-179
-179

T: Шифр Цезаря

В шифре Цезаря каждый символ заменяется на другой символ, третий по счету в алфавите после данного, с цикличность. То есть символ A заменяется на D, символ B - на E, символ C - на F, ..., символ Z на C. Аналогично строчные буквы заменяются на строчные буквы. Все остальные символы не меняются.

Дана строка, зашифруйте ее при помощи шифра Цезаря. Решение оформите в виде функции void caesar_cipher(string & S).

Указание: сделайте функцию char caesar_cipher(char c), шифрующую один данный символ.

Ввод Вывод
In a hole in the ground there lived a hobbit.
Lq d kroh lq wkh jurxqg wkhuh olyhg d kreelw.

U: Количество слов

Дана строка, возможно, содержащая пробелы. Определите количество слов в этой строке. Слово - это несколько подряд идущих букв (как заглавных, так и строчных).

Решение оформите в виде функции int count_words(const string & S). При решении этой задачи нельзя пользоваться дополнительными строками и массивами.

Ввод Вывод
Yesterday, all my troubles seemed so far away
8

V: Самое длинное слово

Дана строка. Найдите в этой строке самое длинное слово и выведите его. Если в строке несколько слов одинаковой максимальной длины, выведите первое из них. Решение оформите в виде функции string longest_word(const string & S).

Ввод Вывод
In a hole in the ground there lived a hobbit.
ground

W: Слова с прописной буквы

Дана строка. Измените регистр символов в этой строке так, чтобы первая буква каждого слова была заглавной, а остальные буквы - строчными.

Решение оформите в виде функции void capitalization(string & S).

Ввод Вывод
In a hole in the ground there lived a hobbit.
In A Hole In The Ground There Lived A Hobbit.

X: Значение выражения - 2

Дано выражение одно из следующих видов: “A+B”, “A-B” или “A*B”, где A и B - целые числа от 0 до 109. Определите значение этого выражения.

Решение оформите в виде функции eval(const string & S).

Ввод Вывод
2*2
4
100-101
-1

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

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

Решение оформите в виде функции bool is_substring(const string & Pattern, const string & Source).

Ввод Вывод
hole in the ground
In a hole in the ground there lived a hobbit.
YES
hole on the ground
In a hole in the ground there lived a hobbit.
NO

Z: Значение выражения - 3

Дана строка, содержащая одно или более целых чисел от 0 до 109, разделенных знаками “+” или “-”. Вычислите значение этого выражения.

Решение оформите в виде функции eval(const string & S).

Ввод Вывод
21+7-10
18