C자 분류

C character classification

C 문자 분류는 C 프로그래밍 언어를 위해 ANSI C 표준 라이브러리의 함수 그룹에 의해 제공되는 연산입니다.이러한 기능은 알파벳 문자, 제어 문자 등 특정 문자 클래스의 멤버십을 테스트하기 위해 사용됩니다.싱글 바이트 및 와이드 문자가 모두 지원됩니다.[1]

역사

유닉스 운영 체제에서 일하는 초기 C 언어 프로그래머들은 문자를 다른 유형으로 분류하기 위한 프로그래밍 숙어를 개발했습니다.예를 들어, ASCII 문자 세트의 경우, 값이 true인 경우, 다음 식에서 문자를 식별합니다.

('A' <=> c & & c <=> 'Z')    ('a' <=> c & & c <=> 'z') 

이는 여러 형식으로 표현될 수 있기 때문에 시스템 전체의 헤더파일 ctype.h에 배치되어 있는 짧고 표준화된 형식의 테스트를 도입하는 것이 바람직하게 되었습니다.

실행

위의 예와 달리 문자 분류 루틴은 비교 테스트로 작성되지 않습니다.대부분의 C 라이브러리에서는 매크로나 함수가 아닌 정적 테이블 룩업으로 작성됩니다.

예를 들어 비트필드로 배열된 256개의 8비트 정수 배열이 생성되며, 여기서 각 비트는 문자의 특정 속성, 예를 들어 isdigit isalpha에 대응한다.정수 중 최하위 비트가 isigit 속성에 해당하는 경우 코드는 다음과 같이 기술될 수 있습니다.

#정의: 숫자(x) (표[x] & 1) 

Linux 초기 버전에서는 첫 번째 코드 샘플과 유사한 오류 가능성이 있는 방법을 사용했습니다.

#parames is digit(x) ((x)>= '0' & (x) <= '9') 

변수 x에 부작용이 있으면 문제가 발생할 수 있습니다.예를 들어 이 digit(x++) 또는 isdigit(run_some_program()인 경우.isdigit에 대한 인수가 두 번 평가되는 것은 즉시 명확하지 않습니다.이러한 이유로 일반적으로 테이블 기반 접근방식이 사용됩니다.

기능의 개요

싱글바이트 문자로 동작하는 함수는 ctype으로 정의되어 있습니다.h 헤더 파일(C++의 경우 cctype).와이드 문자에 대해 작동하는 기능은 wctpe에 정의되어 있습니다.h 헤더 파일(C++의 경우 cwctype).

분류는 유효한 로케일에 따라 평가됩니다.

바이트
성격
넓은
성격
묘사
isalnum iswalnum 오퍼랜드가 영숫자인지 아닌지를 확인합니다.
isalpha iswalpha 오퍼랜드가 알파벳인지 아닌지를 확인합니다.
islower iswlower 오퍼랜드가 소문자인지 확인합니다.
isupper iswupper 오퍼랜드가 대문자인지 확인합니다.
isdigit iswdigit 오퍼랜드가 숫자인지 여부를 확인합니다.
isxdigit iswxdigit 오퍼랜드가 16진수인지 아닌지를 확인합니다.
iscntrl iswcntrl 오퍼랜드가 제어 문자인지 확인합니다.
isgraph iswgraph 피연산자가 그래픽 문자인지 확인합니다.
isspace iswspace 오퍼랜드가 공간인지 확인합니다.
isblank iswblank 오퍼랜드가 공백 문자인지 확인합니다.
isprint iswprint 오퍼랜드가 인쇄 가능한 문자인지 확인합니다.
ispunct iswpunct 오퍼랜드가 구두점인지 확인합니다.
tolower towlower 오퍼랜드를 소문자로 변환합니다.
toupper towupper 오퍼랜드를 대문자로 변환합니다.
iswctype 오퍼랜드가 특정 클래스에 속하는지 여부를 확인합니다.
towctrans 특정 매핑을 사용하여 오퍼랜드를 변환합니다.
wctype 에서 사용할 와이드 문자 클래스를 반환합니다.iswctype
wctrans 에서 사용하는 변환 매핑을 반환합니다.towctrans

레퍼런스

  1. ^ ISO/IEC 9899:1999 specification (PDF). p. 193, § 7.4.

외부 링크