Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 입력값이 숫자인지 확인하는 방법

C++ 프로그래밍을 하다 보면 사용자로부터 입력받은 문자열이 숫자로만 이루어져 있는지 확인해야 하는 경우가 자주 발생합니다. 예를 들어, 입력 검증 단계에서 숫자만 허용해야 하거나, 문자열을 정수로 변환하기 전에 안전성을 확인해야 할 때가 그렇습니다.

여기서 말하는 숫자 문자열(numeric string)이란 모든 문자가 0부터 9 사이의 범위에 속하는 문자열을 의미합니다. 반대로 알파벳이나 특수문자가 하나라도 포함되어 있다면 일반 문자열로 분류됩니다.

기본 원리

해결 방법은 매우 간단합니다. 문자열의 각 문자를 처음부터 끝까지 하나씩 순회하면서 해당 문자가 숫자인지 검사하면 됩니다. 모든 문자가 숫자라면 최종적으로 true를 반환하고, 중간에 숫자가 아닌 문자를 발견하는 즉시 false를 반환하여 불필요한 검사를 줄일 수 있습니다.

C++ 표준 라이브러리에서 제공하는 isdigit() 함수를 활용하면 각 문자가 숫자('0'~'9')인지 손쉽게 판별할 수 있습니다. 이 함수는 <cctype> 헤더에 정의되어 있으며, 인자로 전달된 문자가 숫자이면 0이 아닌 값을, 아니면 0을 반환합니다.

예제 코드

#include <iostream>
using namespace std;

bool isNumeric(string str) {
    for (int i = 0; i < str.length(); i++)
        if (isdigit(str[i]) == false)
            return false; // 숫자가 아닌 문자를 발견하면 false 반환
    return true; // 모든 문자가 숫자인 경우 true 반환
}

int main() {
    string str;
    cout << "문자열을 입력하세요: ";
    cin >> str;
    if (isNumeric(str))
        cout << "숫자입니다" << endl;
    else
        cout << "숫자가 아닙니다";
}

실행 결과

문자열을 입력하세요: 5687
숫자입니다

입력된 "5687"은 모든 문자가 0~9 범위 내에 있으므로 숫자 문자열로 판별됩니다.

실행 결과 (숫자가 아닌 경우)

문자열을 입력하세요: 584asS
숫자가 아닙니다

반면 "584asS"는 'a', 's', 'S'와 같은 알파벳 문자가 포함되어 있어 숫자가 아닌 것으로 판별됩니다.

추가 고려사항

실무에서는 위 기본 구현 외에도 몇 가지 상황을 고려해야 할 수 있습니다.

  • 음수 처리: 위 코드는 음수 부호('-')를 숫자로 인식하지 못합니다. 음수도 허용하려면 첫 번째 문자가 '-' 또는 '+'인 경우를 별도로 처리해야 합니다.
  • 소수점 처리: 실수(예: "3.14")를 허용하려면 소수점('.') 문자에 대한 예외 처리가 필요합니다.
  • 빈 문자열: 빈 문자열이 입력되면 for 루프가 실행되지 않아 true가 반환되므로, 필요에 따라 길이 검사를 추가하는 것이 좋습니다.

이처럼 isdigit() 함수와 간단한 반복문만으로도 문자열이 숫자인지 효율적으로 확인할 수 있습니다.