在 C++ 中檢查輸入是否為整數
-
使用
std::find_if演算法檢查 C++ 中的輸入是否為整數 -
在 C++ 中使用
std::string::find_first_not_of函式來檢查輸入是否為整數 -
在 C++ 中使用
std::string::find_first_not_of函式來檢查輸入是否為整數
本文將演示如何在 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 內建方法 front 和 back 來驗證輸入是否以點符號開頭/結尾。最後,我們在邏輯上將所有三個表示式彼此進行與運算並返回該值。
#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
