Упражнения

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

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

Решение оформите в виде функции int eval(const string & S), получающей в качестве аргумента строку и возвращающую ее значение.

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

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

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

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

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

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

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

Дана строка, зашифруйте ее при помощи шифра Цезаря. Решение оформите в виде функции void CaesarCipher(string & S, int k). S — исходная строка, k — величина сдвига.

Первая строка входных данных содержит текстовую строку. Вторая строка входных данных содержит величину сдвига \(k\), \(0\le k\lt 26\).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

G: Самая частая буква

Дана строка, возможно, содержащая пробелы. Определите, какая буква латинского алфавита (или какие буквы) в этой строке встречается чаще всего. При решении этой задачи заглавные и строчные буквы считаются одинаковыми, а прочие символы, не являющиеся буквами, не учитываются.

Программа должна вывести в первой строке все буквы, которые встречаются чаще всего в исходной строке. Выводить буквы необходимо в заглавном написании, в алфавитном порядке, без пробелов. Во второй строке выведите единственное число - сколько раз в данной строке встречаются эти буквы.

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

Ввод Вывод
- We all live in the Yellow Submarine!
EL
5

H: 12-часовой формат времени

Во многих англоговорящих странах время записывается в 12-часовом формате с указанием одного из двух 12-часовых интервалов: до полудня (a.m.) или после полудня (p.m.). Формально запись времени в 12-часовом формате выглядит, как строка “h:mm x.m.”, где h — число часов от 1 до 12 (однозначное или двухзначное), mm — число минут от 00 до 59, дополненное нулями до двух разрядов, x — одна из двух букв “a” или “p”. Подробней примеры записи времени и их перевод в 24-часовой формат можно найти в википедии.

Дана строка с записью некоторого времени в 12-часовом формате. Выведите его в 24-часовом формате “hh:mm” (hh — количество часов от 00 до 23, дополненное нулями до двух разрядов, mm — количество минут от 00 до 59, дополненное нулями до двух разрядов).

Ввод Вывод
1:00 a.m.
01:00
12:34 p.m.
12:34

I: IP-адрес

В сети интернет каждому компьютеру присваивается четырехбайтовый код, который принято записывать в виде четырех чисел, каждое из которых может принимать значения от 0 до 255, разделенных точками. Вот примеры правильных IP-адресов:

127.0.0.0
192.168.0.1
255.0.255.255

Программа получает на вход строку из произвольных символов. Если эта строка является корректной записью IP-адреса, выведите YES, иначе выведите NO.

Ввод Вывод
127.0.0.1
YES

J: Форматирование текста

Дана текстовая строка, содержащая буквы латинского алфавита, пробелы, запятые и точки. Отформатируйте этот текст по следующим правилам:

  1. В начале и конце строки не должно быть пробелов.
  2. Все слова разделяются ровно одним пробелом.
  3. Точки и запятые пишутся слитно с предыдущим словом, после знака препинания ставится пробел.

Выведите полученную строку, добавив в конец символ “#”.

Ввод Вывод
    Hello ,    world . 
Hello, world.#

K: Календарь

Напечатайте календарь на месяц. Месяц может состоять из 28, 29, 30, 31 дня. Календарь на месяц состоит из 4, 5 или 6 столбцов, заполненных числами (датами). Ширина каждого столбца - два символа, между столбцами промежуток в один символ. Однозначные числа дополняются пробелом слева. Промежуток между столбцами - один пробел. В каждом столбце должно быть записано хотя бы одно число.

Программа получает на вход два числа - количество дней в месяце (от 28 до 31) и день недели, на которое приходится первое число месяца (от 1 до 7) и должна вывести календарь на указанный месяц.

Ввод Вывод
31 3
    6 13 20 27
7 14 21 28
1 8 15 22 29
2 9 16 23 30
3 10 17 24 31
4 11 18 25
5 12 19 26

L: Значение выражения - 4

Строка состоит из целых неотрицательных чисел, разделенных знаками операций “+”, “-” и “*”. Вычислите значение этого выражения выполняя действия по правилам арифметики.

Тесты к этой задаче закрытые.

Ввод Вывод
10-2*3
4