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

C++ STL iswxdigit() 함수 완벽 가이드: 구문, 동작 원리와 예제

이 글에서는 C++의 iswxdigit() 함수가 무엇인지, 어떤 구문으로 사용되는지, 내부적으로 어떻게 동작하며 어떤 값을 반환하는지 자세히 알아보겠습니다.

iswxdigit() 함수는 C++ 표준 라이브러리에 내장된 함수로, <cwctype> 헤더 파일에 정의되어 있습니다. 이 함수는 인자로 전달된 와이드 문자(wide character)가 16진수(hexadecimal) 문자인지 여부를 검사합니다. 전달된 문자가 16진수 문자라면 0이 아닌 정수값(true)을 반환하고, 그렇지 않으면 0(false)을 반환합니다.

여기서 말하는 16진수 문자란 다음 목록에 포함된 문자를 의미합니다.

0 1 2 3 4 5 6 7 8 9 A B C D E F

구문

int iswxdigit(wint_t ch);

함수는 단 하나의 매개변수만 받습니다. 바로 검사 대상이 되는 와이드 문자입니다. 이 인자는 wint_t 타입 또는 WEOF로 캐스팅되어 전달됩니다.

wint_t는 정수 계열(integral type) 데이터를 저장할 수 있는 타입입니다.

반환값

함수는 정수값을 반환합니다. 검사 결과가 거짓(false)이면 0을, 참(true)이면 0이 아닌 값을 반환합니다.

예제 1: 기본 사용법

#include <iostream>
#include <cwctype>
using namespace std;
int main() {
    wint_t a = 'A';
    wint_t b = '9';
    wint_t c = 'g';
    iswxdigit(a)?cout<<"\nIts hexadecimal character":cout<<"\nNot hexadecimal character";
    iswxdigit(b)?cout<<"\nIts hexadecimal character":cout<<"\nNot hexadecimal character";
    iswxdigit(c)?cout<<"\nIts hexadecimal character":cout<<"\nNot hexadecimal character";
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Its hexadecimal character
Its hexadecimal character
Not hexadecimal character

실행 결과를 보면 'A'와 '9'는 16진수에서 유효한 숫자이므로 참(0이 아닌 값)이 반환되고, 'g'는 16진수 문자에 해당하지 않으므로 0이 반환되는 것을 확인할 수 있습니다.

예제 2: wcstol()과 함께 활용하기

#include <stdio.h>
#include <cwchar>
#include <cwctype>
using namespace std;
int main () {
    wchar_t s[] = L"ffff";
    long int num;
    if (iswxdigit(s[0])) {
        num = wcstol (s,NULL,16);
        wprintf (L"The hexadecimal number %lx is %ld.\n",num,num);
    }
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

The hexadecimal number ffff is 65535.

이 예제에서는 문자열의 첫 번째 문자가 16진수 문자인지 iswxdigit()으로 먼저 검사한 뒤, 조건이 참일 때만 wcstol() 함수를 호출하여 16진수 문자열을 10진수(long 타입)로 안전하게 변환합니다. 변환 결과 16진수 "ffff"는 10진수로 65535임을 알 수 있습니다.

정리

iswxdigit()는 와이드 문자가 16진수 숫자(0~9, A~F, a~f)에 해당하는지 빠르게 판별할 수 있는 유용한 함수입니다. 특히 사용자 입력을 16진수로 변환하기 전에 유효성을 검사하는 단계에서 활용하면 안정적인 프로그램을 작성하는 데 큰 도움이 됩니다. 참고로 좁은 문자(narrow character)를 검사할 때는 동일한 역할을 하는 isxdigit() 함수를 사용할 수 있으며, 기본 "C" 로케일 환경에서는 위에서 언급한 16개의 문자만 16진수 문자로 인식됩니다.