The most efficient way would be just to iterate over the string until you find a non-digit character. If there are any non-digit characters, you can consider the string not a number.

bool is_number(const std::string& s)

{

std::string::const_iterator it = s.begin();

while (it != s.end() && std::isdigit(*it)) ++it;

return !s.empty() && it == s.end();

}

Or if you want to do it the C++11 way:

bool is_number(const std::string& s)

{

return !s.empty() && std::find_if(s.begin(),

s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end();

}

As pointed out in the comments below, this only works for positive integers. If you need to detect negative integers or fractions, you should go with a more robust library-based solution. Although, adding support for negative integers is pretty trivial.

Why reinvent the wheel? The C standard library (available in C++ as well) has a function that does exactly this:

char* p;

long converted = strtol(s, &p, 10);

if (*p) {

// conversion failed because the input wasn’t a number

}

else {

// use converted

}

If you want to handle fractions or scientific notation, go with strtod instead (you’ll get a double result).

If you want to allow hexadecimal and octal constants in C/C++ style (“0xABC”), then make the last parameter 0 instead.

Your function then can be written as

bool isParam(string line)

{

char* p;

strtol(line.c_str(), &p, 10);

return *p == 0;

}