C++에서 입력이 정수인지 확인
-
std::find_if
알고리즘을 사용하여 C++에서 입력이 정수인지 확인 -
std::string::find_first_not_of
함수를 사용하여 C++에서 입력이 정수인지 확인 -
std::string::find_first_not_of
함수를 사용하여 C++에서 입력이 정수인지 확인
이 기사에서는 입력이 C++에서 정수인지 확인하는 방법에 대한 여러 방법을 보여줍니다.
std::find_if
알고리즘을 사용하여 C++에서 입력이 정수인지 확인
std::find_if
는<alogrithm>
헤더 파일에 정의 된 STL 알고리즘 라이브러리의 일부이며 범위의 특정 요소를 검색하는 데 사용할 수 있습니다. 사용자 입력이 문자열 일 가능성이 가장 높기 때문에 입력 데이터가std::string
객체에 저장되어 있다고 가정합니다. std::string
에 대한 참조를 가져와bool
값을 반환하는isNumber
라는 함수를 구현합니다.
다음 예제에서 사용한std::find_if
함수의 프로토 타입은 세 개의 인수를 취하며, 그 중 처음 두 개는 범위 요소 인[first, last]
를 지정합니다. 세 번째 인수는isdigit
함수의 반전 된 값을 평가하여bool
값을 반환하는 람다 함수 인 단항 술어입니다. 외부 계층에서std::find_if
반환 값이str.end()
와 비교됩니다. 표현식의true
값은 숫자가 아닌 문자가 발견되지 않았 음을 나타냅니다. 따라서 그것은 숫자입니다. 또한 문자열이 비어 있음을 나타 내기 위해!str.empty
를 사용하여 이전 표현식을 논리적으로 AND하여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
std::string::find_first_not_of
함수를 사용하여 C++에서 입력이 정수인지 확인
또는std::string
객체에 내장 된find_first_not_of
메소드를 사용하여isNumber
함수를 다시 구현할 수 있습니다. find_first_not_of
는 문자열 값을 가져 와서 문자열 시퀀스의 문자와 같지 않은 첫 번째 문자를 찾을 수 있습니다. 함수가 이러한 문자를 찾지 못하면string::npos
가 반환됩니다. 따라서 10 진수 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
std::string::find_first_not_of
함수를 사용하여 C++에서 입력이 정수인지 확인
그러나 이전 방법은 실수를 식별하지 않고 불법으로 취급합니다. 따라서.
를 추가 할 수 있습니다. 문자를 문자열에 추가하고 함수가 점 기호가있는 모든 숫자 시퀀스를 유효한 숫자로 인식 할 수 있도록합니다. .
가 표시 될 때 두 가지 경우를 제거해야합니다. 문자는 입력 시퀀스의 첫 번째 및 마지막 기호이며, 규칙에 따라 유효한 실수가 아닙니다. string
내장 메소드front
및back
을 사용하여 입력이 점 기호로 시작 / 종료되지 않는지 확인할 수 있습니다. 마지막으로 세 가지 식을 모두 논리적으로 AND하고 해당 값을 반환합니다.
#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
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 Facebook