Хотя вы могли бы на самом деле пройти процесс его преобразования в int, я предполагаю, что вы действительно хотите знать, являются ли все символы в нем цифрами?
К сожалению, даже тогда естьникакой опции, но выполнять линейный проход через строку, хотя это должно быть быстрее, чем сначала преобразовать в целое число.
Используя STL, вы можете использовать std :: find и :: isdigit и std :: not1
template<typename FwdIter>
bool all_digits( FwdIter start, FwdIter end )
{
return std::find( start, end, std::not1(::isdigit) ) == end;
}
Конечно, вы могли бы просто написать цикл
template<typename FwdIter>
bool all_digits( FwdIter start, FwdIter end )
{
for( ; start != end; ++start )
{
if( !::isdigit( *start ) )
return false;
}
return true;
}
Это не будет полностью сказать вам, если входная строка представляет положительное число, поскольку все они могут быть нулями, и строка может быть пустой.Мы можем легко охватить это в версии цикла.
template<typename FwdIter>
bool is_positive_int( FwdIter start, FwdIter end )
{
bool foundNonZero;
for( ; start != end; ++start )
{
if( !::isdigit( *start ) )
return false;
if( *start > '0' ) // it must be a digit
foundNonZero = true;
}
return foundNonZero;
}
Допущения:
- У вас могут быть начальные нули (но там должен быть хотя бы один ненулевой), так0234 является действительным положительным числом
- Пробелы запрещены