most elegant way to check if an argv[i] is an integer

Hello

In C++, what is the most elegant way to check if an argv[i] is an integer? I prefer a short inbuilt check instead of writing a function that does something like traverse the char* and check if each element is a digit.

Any suggestions? thank you
LuckyLucksAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

NorieAnalyst Assistant Commented:
Are you assuming the argument will be numeric or could it be anything?
0
Fabrice LambertFabrice LambertCommented:
Hi,

You can use the std::stoi function, and see if it throw an exception:
bool isInteger(char const* in)
{
    try
    {
        std::stoi(std::string(in));
        return true;
    }
    catch(std::invalid_argument const& e)
    {
        return false;
    }
}

Open in new window

Note: This can still throw an out of range exception.
Up to you to see if that's an acceptable behavior or not.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
evilrixSenior Software Engineer (Avast)Commented:
Use a regular expression: http://en.cppreference.com/w/cpp/regex
0
sarabandeCommented:
instead of writing a function that does something like traverse the char* and check if each element is a digit.
this check wouldn't be sufficient since you wouldn't know whether the string is a 32-bit or 64-bit integer (or even more bits).

if the check for limits is not required you could do

if (std::string(argv[i]).find_first_not_of("1234567890") != std::string::npos)
{
     // argv[i] contains at least one non-digit
     return error_handling(argv[i]);
}

Open in new window


note, the above code also would test each char element whether it is a digit or not.

Sara
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.