在 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