Дата публикации: 05.06.2025
Задача C++: Помогите с 9 тестом
Содержимое статьи:
Исходный код:
#include <iostream>
using namespace std;
int main() {
string input;
cin >> input;
int colonPos = input.find(':');
int a = stoi(input.substr(0, colonPos));
int b = stoi(input.substr(colonPos + 1));
cout << min(a, b) << endl;
return 0;
}
9 тест:
99:0
Результат:
0
Ожидаемый результат:
99
Решение:
Проблема возникает из-за того, что ввод не проверяется на наличие недопустимых символов или формата. В последнем тесте 99:0
второй символ - 9
, а не цифра. Это приводит к ошибке при попытке преобразовать его в целое число int
с помощью stoi
.
Чтобы решить эту проблему, необходимо сначала проверить ввод на наличие допустимых символов и формата. Это можно сделать с помощью регулярных выражений:
#include <iostream>
#include <regex>
using namespace std;
int main() {
string input;
regex timeRegex("([0-9]+):([0-9]+)");
cin >> input;
// Проверяем ввод на допустимость
if (!regex_match(input, timeRegex)) {
cout << "Недопустимый формат ввода!\n";
return 1; // Или обработать ошибку другим способом
}
int colonPos = input.find(':');
int a = stoi(input.substr(0, colonPos));
int b = stoi(input.substr(colonPos + 1));
cout << min(a, b) << endl;
return 0;
}