Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба7 / Laba 7 (11.1)
.cpp#include <iostream>
#include <string>
#include <stdexcept>
#include <locale>
#include <climits>
using namespace std;
class OverflowException : public exception {
public:
const char* what() const noexcept override {
return "Переполнение: сумма слишком велика для типа int";
}
};
class NoDigitsException : public exception {
public:
const char* what() const noexcept override {
return "В последовательности нет цифр";
}
};
class NullException : public exception {
public:
const char* what() const noexcept override {
return "Пустая последовательность";
}
};
int processSequence(const string& seq) {
if (seq.empty()) throw NullException();
long long sum = 0; // Используем long long для проверки переполнения
bool hasDigits = false;
string currentNumber;
for (char c : seq) {
if (isdigit(c)) {
currentNumber += c;
hasDigits = true;
} else if (!currentNumber.empty()) {
int num = stoi(currentNumber);
sum += num;
if (sum > INT_MAX || sum < INT_MIN) throw OverflowException();
currentNumber.clear();
}
}
// Обработка последнего числа
if (!currentNumber.empty()) {
int num = stoi(currentNumber);
sum += num;
if (sum > INT_MAX || sum < INT_MIN) throw OverflowException();
}
if (!hasDigits) throw NoDigitsException();
return static_cast<int>(sum);
}
int main() {
setlocale(LC_ALL, "ru_RU.UTF-8");
string input;
cout << "Введите последовательность символов (окончание - $): ";
getline(cin, input, '$');
try {
int result = processSequence(input);
cout << "Сумма всех чисел: " << result << endl;
} catch (const exception& e) {
cout << "Ошибка: " << e.what() << endl;
}
return 0;
}
Соседние файлы в папке Лаба7
