Может быть, я воспламенен за то, что я не использую strtol
или подобные libc
функции, но рассуждать об этой проблеме не так уж и сложно:
#include <stdbool.h> // if using C99... for C++ leave this out.
#include <ctype.h>
bool is_valid_int(const char *str)
{
// Handle negative numbers.
//
if (*str == '-')
++str;
// Handle empty string or just "-".
//
if (!*str)
return false;
// Check for non-digit chars in the rest of the stirng.
//
while (*str)
{
if (!isdigit(*str))
return false;
else
++str;
}
return true;
}
[NB: в противном случае я мог бы сделать isdigit(*str++)
вместо else
, чтобы сделать его короче, но я помню, что стандарты говорят, что возможно, что isdigit
- это макрос.]
Я предполагаю, что одно ограничение заключается в том, что это не возвращает false, если число в строке не помещается в целое число. Это может иметь или не иметь значения для вас.