Вот то, что я реализовал в прошлый раз, и этот код работает для большинства моих тестовых случаев, но не работает для этих случаев. [code]#include #include #include #include #include #include #include
long long ConvertStringToNumber(std::string number) { long long int finalNumber = 0; bool isNegative = false; int i = 0; if (number.at(0) == '-') { isNegative = true; i++; } for (; i < number.length(); i++) { if (number.at(i) < '0' || number.at(i) > '9') { throw std::invalid_argument("Some error..."); } if (finalNumber > (std::numeric_limits::max() - (number.at(i) - '0')) / 10) { throw std::overflow_error("Input string contains a number that is too large!!!"); throw std::range_error("Number is too large"); } finalNumber = finalNumber * 10 + (number.at(i) - '0'); } return isNegative ? -finalNumber : finalNumber; }
std::vector NumbersInString(std::string s) { std::vector numbers; std::string currentNumber = ""; bool isNumber = true; for (int i = 0; i < s.length(); i++) { char c = s.at(i); if ((c >= '0' && c = '0' && currentNumber.at(0) 'z') && (s.at(i) < 'A' || s.at(i) > 'Z'))) { try { long long int number = ConvertStringToNumber(currentNumber); numbers.push_back(number); } catch (std::domain_error &k) { // skip it } } } currentNumber = ""; isNumber = false; } }
if (isNumber && !currentNumber.empty()) { try { long long int number = ConvertStringToNumber(currentNumber); numbers.push_back(number); } catch (std::domain_error &e) { } // skip again } return numbers; }