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

Jinku Hu 2023年10月12日
  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 <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
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 <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
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 <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Integer