лексическое приведение — C ++ проверяет, является ли строка числовой

Мне нужно проверить, если std::string это число. Под номером я подразумеваю либо целое число, либо число с десятичной точкой (основание 10).

Я в порядке с ограничениями, которые long long обеспечивает так что-нибудь за пределами, что меня не волнует. У меня нет повышения, но я скопировал lexical_cast,

Похоже на кастинг double проверка строки действительно работает, но мне интересно, есть ли какие-нибудь угловые случаи, о которых я не думаю.

#include <typeinfo>
#include <sstream>

template<typename Out, typename In> static Out lexical_cast(In input)
{
stringstream ss;
ss << input;

Out r;
if ((ss >> r).fail() || !(ss >> std::ws).eof())
{
throw std::bad_cast();
}

return r;
}

bool is_numeric(const string in)
{
bool success = false;

try
{
lexical_cast<double>(in);
success = true;
}
catch(std::bad_cast &exc)
{
success = false;
}

return success;
}

РЕДАКТИРОВАТЬ

число с плавающей запятой

Я не использую C ++ 0x / C ++ 11, поэтому я не могу использовать регулярные выражения для простой проверки числа с плавающей запятой. И я пытаюсь НЕ разбирать строку самостоятельно, поскольку это просто означает, что мне нужно провести больше юнит-тестов, чтобы убедиться, что я ничего не пропустил.

С NaN я знаю, что у них есть собственность float1 != float1 но GCC облажается.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]