isalnum

isalnum

한 문자가 숫자인지 알파벳인지, 즉 영숫자(alphanumeric)인지 확인할 때 써요. <ctype.h>의 문자 분류 함수 중 하나예요.

출처: cppreference

본문

문법 (Syntax)

int isalnum ( int ch );

설명 (Explanation)

현재 C 로케일이 분류하는 기준으로, 주어진 문자가 영숫자인지 확인해요. 기본 로케일에서는 다음 문자들이 영숫자예요.

  • 숫자 (0123456789)
  • 대문자 (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
  • 소문자 (abcdefghijklmnopqrstuvwxyz)

ch의 값이 unsigned char로 표현할 수 없고 EOF와도 같지 않으면 동작이 정의되지 않아요. 문자 분류 함수를 쓸 때 흔히 하는 실수인데, char 값을 그대로 넘기면 범위 문제가 생길 수 있으니 주의하세요.

매개변수 (Parameters)

  • ch — 분류할 문자

반환값 (Return value)

문자가 영숫자면 0이 아닌 값, 아니면 0을 반환해요.

예시 (Example)

로케일에 따라 분류 결과가 달라지는 걸 보여주는 예시예요. 기본 C 로케일에서는 ß(독일어 에스체트)를 영숫자로 보지 않지만, ISO-8859-1 로케일에서는 영숫자로 분류해요.

#include <ctype.h>
#include <locale.h>
#include <stdio.h>

int main(void)
{
    unsigned char c = '\xdf'; // German letter ß in ISO-8859-1

    printf("isalnum('\\xdf') in default C locale returned %d\n", !!isalnum(c));

    if (setlocale(LC_CTYPE, "de_DE.iso88591"))
        printf("isalnum('\\xdf') in ISO-8859-1 locale returned %d\n", !!isalnum(c));
}

가능한 출력 (Possible output):

isalnum('\xdf') in default C locale returned 0
isalnum('\xdf') in ISO-8859-1 locale returned 1

참고 문헌 (References)

  • C23 표준 (ISO/IEC 9899:2024): 7.4.1.1 The isalnum function (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018): 7.4.1.1 The isalnum function (p: 145)
  • C11 표준 (ISO/IEC 9899:2011): 7.4.1.1 The isalnum function (p: 200)
  • C99 표준 (ISO/IEC 9899:1999): 7.4.1.1 The isalnum function (p: 181)
  • C89/C90 표준 (ISO/IEC 9899:1990): 4.3.1.1 The isalnum function

더 알아보기

  • 와이드 문자 버전인 iswalnum도 있어요. 넓은 문자를 다룬다면 그쪽을 쓰세요.
  • 알파벳만 확인하고 싶다면 isalpha를 보세요.
  • cppreference 원문에서 isalnum의 자세한 내용을 확인할 수 있어요.