문자열이 C++의 숫자인지 확인하는 방법
-
std:isdigit
방법을 사용하여 문자열이 숫자인지 확인 -
std::isdigit
를std::ranges::all_of
와 함께 사용하여 문자열이 숫자인지 확인 -
find_first_not_of
방법을 사용하여 문자열이 숫자인지 확인
이 글은 주어진 C++ 문자열이 숫자인지 알아내는 방법을 설명한다. 파고들기 전에 다음 방법은 단바이트 문자열과 십진수 적분수만으로 호환된다는 점에 유의해야 한다.
std:isdigit
방법을 사용하여 문자열이 숫자인지 확인
첫 번째 버전은 아마도 솔루션을 구현하는 가장 확실한 방법 일 것입니다. 즉, 문자열을 isNumber
함수에 매개 변수로 전달하면 문자열의 모든 문자를 반복하고 isdigit
메소드로 확인합니다. 숫자가 아닌 첫 번째를 찾을 때 함수는 false를 반환하고, 아무것도 발견되지 않으면 true를 반환합니다.
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& str) {
for (char const& c : str) {
if (std::isdigit(c) == 0) return false;
}
return true;
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
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";
return EXIT_SUCCESS;
}
출력:
Not number
Number
Not number
if-else
의 간결한 변형 인 삼항 조건 연산자를 통해 각 문자열에 대한 답신을 출력합니다.
std::isdigit
를std::ranges::all_of
와 함께 사용하여 문자열이 숫자인지 확인
이전 방법은 강력한 C++에 대해 매우 기본적인 것이 었으므로 C++ 20 메서드std::ranges::all_of
와 일부 람다 식을 사용하여보다 웅변적인 솔루션을 구현해 보겠습니다. 우리의 경우ranges::all_of
는 지정된 람다가 주어진 범위s.begin(), s.end()
의 모든 요소에 대해 true를 반환하는지 확인하고 조건이 충족되면 true를 반환합니다.
#include <algorithm>
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& s) {
return std::ranges::all_of(s.begin(), s.end(),
[](char c) { return isdigit(c) != 0; });
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
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";
return EXIT_SUCCESS;
}
find_first_not_of
방법을 사용하여 문자열이 숫자인지 확인
이 버전은 내장 된 ‘문자열’검색 알고리즘을 사용합니다. 알고리즘은 인수로 전달 된 ‘문자열’의 문자 중 하나도없는 첫 번째 문자를 검색합니다 (이 경우에는 “0123456789”). 문자를 찾을 수 없으면 string::npos
가 반환되므로isNumber
에서 비교 결과를 반환합니다.
#include <iostream>
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 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
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";
return EXIT_SUCCESS;
}
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