У меня есть короткое целое число в строке. Например: «123456». Есть ли API для проверки, содержит ли строка допустимое число в диапазоне беззнаковых шорт?
Спасибо!
Просто используйте операторы потока для ввода числа:
istringstream istr("12346"); short s; if ((istr >> s) and istr.eof()) cout << "valid: " << s << endl; else cout << "invalid" << endl;
(необходим заголовок sstream.)
sstream
Мне нравится boost :: lexical_cast :
#include <boost/lexical_cast.hpp> #include <iostream> #include <string> int main() { std::string s("12346"); try { boost::lexical_cast<unsigned short>(s); std::cout << "valid\n"; } catch (boost::bad_lexical_cast&) { std::cout << "invalid\n"; } }
Я бы использовал strtol как для преобразования числа, так и для проверки, была ли это допустимая числовая строка, используя параметр "endptr".Затем вы можете преобразовать его в короткую и проверить на равенство.