Журнал транзакций: ошибки через исключения
Условие
Обработайте журнал операций по счетам. Каждая строка должна содержать ровно два поля: имя счёта и целое число (знак + или - допустим, только цифры, без дробной части и пробелов внутри). Операция прибавляет число к балансу счёта (новые счета начинаются с 0). Для каждой строки выведите:
OK, если операция применена;ERROR format, если полей не два;ERROR number, если второе поле не целое число;ERROR range, если число не помещается вlong long;ERROR funds, если баланс стал бы отрицательным (операция не применяется).
После журнала выведите все счета, с которыми прошла хотя бы одна успешная операция, по возрастанию имён: имя баланс. Гарантируется, что балансы остаются в пределах long long.
Сделайте разбор и проверки функциями, которые бросают исключения (std::stoll бросает std::invalid_argument и std::out_of_range, а нехватку средств опишите своим классом-наследником std::runtime_error), и обработайте их в одном месте.
Ввод: n (1 ≤ n ≤ 2000), затем n строк.
Вывод: n строк с результатами, затем балансы.
Пример 1
Ввод:
5
ann 100
ann -150
bob 12x
ann
ann -100
Вывод:
OK
ERROR funds
ERROR number
ERROR format
OK
ann 0
Пример 2
Ввод:
3
x 99999999999999999999
y +5
z -0
Вывод:
ERROR range
OK
OK
y 5
z 0
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.