문자열이 C++의 숫자인지 확인하는 방법

Jinku Hu 2023년10월12일
  1. std:isdigit 방법을 사용하여 문자열이 숫자인지 확인
  2. std::isdigitstd::ranges::all_of와 함께 사용하여 문자열이 숫자인지 확인
  3. find_first_not_of 방법을 사용하여 문자열이 숫자인지 확인
문자열이 C++의 숫자인지 확인하는 방법

이 글은 주어진 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::isdigitstd::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;
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ String