C++에서 입력이 정수인지 확인

Jinku Hu 2023년10월12일
  1. std::find_if알고리즘을 사용하여 C++에서 입력이 정수인지 확인
  2. std::string::find_first_not_of함수를 사용하여 C++에서 입력이 정수인지 확인
  3. std::string::find_first_not_of함수를 사용하여 C++에서 입력이 정수인지 확인
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내장 메소드frontback을 사용하여 입력이 점 기호로 시작 / 종료되지 않는지 확인할 수 있습니다. 마지막으로 세 가지 식을 모두 논리적으로 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
작가: 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++ Integer