How to Determine if a String Is a Number in C++

  1. Use std::isdigit Method to Determine if a String Is a Number
  2. Use std::isdigit With std::ranges::all_of to Determine if a String Is a Number
  3. Use find_first_not_of Method to Determine if a String Is a Number

This article explains how to find out if a given C++ string is a number. Before we dig in, it should be noted that the following methods are only compatible with single-byte character strings and decimal integral numbers.

Use std::isdigit Method to Determine if a String Is a Number

The first version is probably the most obvious way to implement the solution. Namely, pass a string as a parameter to a function isNumber, which iterates over every single char in the string and checks with isdigit method. When it finds the first non-number the function returns false, if none is found returns true.

#include <iostream>

using std::cout;
using std::cin;
using std::endl
using std::string;

bool isNumber(const string& str)
{
    for (char const &c : str) {
        if (std::isdigit(c) == 0) return false;
    }
    return true;
}

int main(){
    string str1 = "231524randstr23";
    string str2 = "23152423";
    string str3 = "a3152423";

    isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
    isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
    isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";

    return EXIT_SUCCESS;
}

Output:

Not number
Number
Not number

Notice that we output verdict on each string via ? : ternary conditional operator, which is a concise variant of if-else.

Use std::isdigit With std::ranges::all_of to Determine if a String Is a Number

The previous method was quite basic for the mighty C++, so let’s implement a more eloquent solution using C++20 method std::ranges::all_of and some lambda expressions. In our case ranges::all_of checks if the specified lambda returns true for every element of the given range s.begin(), s.end() and returns true if condition is satisfied.

#include <iostream>
#include <algorithm>

using std::cout;
using std::cin;
using std::endl
using std::string;

bool isNumber(const string& s)
{
    return std::ranges::all_of(s.begin(), s.end(),
                  [](char c){ return isdigit(c) != 0; });
}

int main(){
    string str1 = "231524randstr23";
    string str2 = "23152423";
    string str3 = "a3152423";

    isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
    isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
    isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";

    return EXIT_SUCCESS;
}

Use find_first_not_of Method to Determine if a String Is a Number

This version utilizes a builtin string search algorithm. The algorithm searches for the first character equal to none of the characters in string passed as an argument (in our case - “0123456789”). If the character is not found string::npos is returned, thus we return the result of comparison from isNumber.

#include <iostream>

using std::cout;
using std::cin;
using std::endl
using std::string;

bool isNumber(const string& str)
{
    return str.find_first_not_of("0123456789") == string::npos;
}

int main(){
    string str1 = "231524randstr23";
    string str2 = "23152423";
    string str3 = "a3152423";

    isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
    isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
    isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";

    return EXIT_SUCCESS;
}

Related Article - C++ String

  • How to Convert String to Int in C++
  • How to Reverse a String in C++
  • comments powered by Disqus