在 C++ 中檢查輸入是否為整數

Jinku Hu 2023年1月30日 2021年4月29日
  1. 使用 std::find_if 演算法檢查 C++ 中的輸入是否為整數
  2. 在 C++ 中使用 std::string::find_first_not_of 函式來檢查輸入是否為整數
  3. 在 C++ 中使用 std::string::find_first_not_of 函式來檢查輸入是否為整數
在 C++ 中檢查輸入是否為整數

本文將演示如何在 C++ 中檢查輸入是否為整數的多種方法。

使用 std::find_if 演算法檢查 C++ 中的輸入是否為整數

std::find_if<alogrithm> 標頭檔案中定義的 STL 演算法庫的一部分,可用於搜尋範圍中的特定元素。由於使用者輸入很可能是字串,因此我們將假定輸入資料儲存在 std::string 物件中。注意,我們實現了一個名為 isNumber 的函式,該函式引用了 std::string,並返回 bool 值。

在下面的示例中使用的 std::find_if 函式的原型帶有三個引數,其中前兩個引數指定範圍元素-[first, last]。第三個引數是一個單數謂詞,它是一個 lambda 函式,它通過計算 isdigit 函式的倒數值來返回 bool 值。在外層,將 std::find_if 返回值與 str.end() 進行比較,因為表示式的 true 值表示未找到非數字字元。因此,這是數字。此外,我們在邏輯上將前一個表示式與!str.empty 進行與運算,以指示該字串為空,並返回 false

#include <iostream>
#include <string>
#include <algorithm>

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

bool isNumber(const string& str)
{
    return !str.empty() &&
        std::find_if(str.begin(), str.end(),
            [](unsigned char c) { return !std::isdigit(c); }) == str.end();
}

int main(){
    string str1 = "12345.";
    string str2 = "12312";
    string str3 = "123142.2";

    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";

    exit(EXIT_SUCCESS);
}

輸出:

Not number
Number
Not number

在 C++ 中使用 std::string::find_first_not_of 函式來檢查輸入是否為整數

另外,我們可以使用 std::string 物件內建的 find_first_not_of 方法重新實現 isNumber 函式。find_first_not_of 可以獲取字串值,並找到不等於字串序列中所有字元的第一個字元。如果函式找不到這樣的字元,則返回 string::npos。因此,我們指定所有 10 位小數作為 find_first_not_of 引數,並檢查其與 npos 的相等性,因為表示式值是從函式返回的。

#include <iostream>
#include <string>
#include <algorithm>

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 = "12345.";
    string str2 = "12312";
    string str3 = "123142.2";

    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";

    exit(EXIT_SUCCESS);
}

輸出:

Not number
Number
Not number

在 C++ 中使用 std::string::find_first_not_of 函式來檢查輸入是否為整數

但是請注意,先前的方法不會識別實數,而是將其視為非法數字。所以,我們可以在字串中加入 . 字元,讓函式識別任何帶有點符號的數字序列為有效數字。我們需要消除兩種情況。字元是輸入序列中的第一個和最後一個符號,按照我們的慣例,這不是有效的實數。我們可以使用 string 內建方法 frontback 來驗證輸入是否以點符號開頭/結尾。最後,我們在邏輯上將所有三個表示式彼此進行運算並返回該值。

#include <iostream>
#include <string>
#include <algorithm>

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

bool isNumber3(const string& str)
{
    return str.find_first_not_of( ".0123456789" ) == string::npos &&
        str.front() != '.' && str.back() != '.';
}

int main(){
    string str1 = "12345.";
    string str2 = "12312";
    string str3 = "123142.2";

    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";

    exit(EXIT_SUCCESS);
}

輸出:

Not number
Number
Number
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ Integer