Кажется, вы хотите проверить строку как ввод. Это зависит от того, хотите ли вы проверить, что ваша строка содержит double или int. Следующие проверки для двойного (разрешены пробелы в начале и в конце).
bool is_double(char const* s) {
int n;
double d;
return sscanf(s, "%lf %n", &d, &n) == 1 && !s[n];
}
sscanf
вернет преобразованные элементы (без '% n'). n
будет установлено на количество обработанных символов ввода. Если все входные данные были обработаны, s [n] вернет завершающий символ 0. Пробел между двумя спецификаторами формата учитывает необязательные конечные пробелы.
Следующие проверки для int, используемые методы:
bool is_int(char const* s) {
int n;
int i;
return sscanf(s, "%d %n", &i, &n) == 1 && !s[n];
}
Был вопрос об этом здесь , который включает в себя и другие способы C ++ для этого, такие как использование потоков строк и функций из boost, например lexical_cast и так далее. Как правило, они должны быть предпочтительнее таких функций, как scanf, поскольку очень легко забыть передать «%» в scanf или какой-либо адрес. scanf не распознает это, но вместо этого будет делать произвольные вещи, в то время как lexical_cast, например, выдаст исключение, если что-то не так.