Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.16 Кб
Скачать
#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