4 문자 다루기

문자와 문자열들을 가지고 일을 하는 프로그램들은 종종 한 문자가 알파벳인지 숫자인지 또는 공백인지, 등등을 분류할 필요와 각 문자열에 원하는 변환을 시킬 필요가 있다. 'ctype.h'안에 있는 함수들이 이와 같은 목적을 위한 함수들을 제공한다. 문자조합과 지역을 선택한 후에 특별한 문자 코드들의 부류로 변화 시킬 수 있는데, 이 모든 함수들은 현재의 지역에 의해 영향을 받는다.( 더 정밀히 말하면 LC_CTYPE 분류의 문자분류를 위해 선택되어진 현재의 위치에 의해 영향을 받는다.; 19.3절[Locale Categories] 를 참조하라.)


4.1 문자들의 분류

이 절은 문자들 분류를 위한 라이브러리 함수들을 설명한다. 예를 들면 isalpha는 한 문자가 알파벳 문자들인지 테스트 하기 위한 함수이다. 이 함수는 테스트 하기 위한 문자를 하나의 인수로 취하여 만약 그것이 알파벳이면 영이 아닌 정수를 리턴하고 다른 경우는 영을 리턴 한다. 당신을 이것을 다음과 같이 사용할 수 있다.

if (isalpha (c))
printf ("The character `%c' is alphabetic.\n", c);
/* 만약 c가 알파벳이면 "이 문자는 알파벳이다" 라는걸 프린트하겠죠...? */

이 절안의 각각의 함수들을 문자들이 특별한 부류 안에 속하는지를 테스트 하기 위한 함수들이다. 각각은 'is'로 함수이름이 시작된다. 그들 함수는 테스트 하기 위한 문자를 하나의 인수로 취하고 boolean값으로 취급되는 정수를 리턴 한다. 그 문자인수는 int형으로 간주되고 실제 문자 대신에 상수값 EOF로 되어질 것이다. 어느 주어진 문자의 속성은 지역들에 따라서 변화할 수 있다. 지역들에 대한 더 다양한 정보는 19장[Locales] 참조하라.

다음은 'ctype.h'의 헤더파일에 정의된 함수들이다.

함수 int islower (int c)

만약 c가 소문자이면 참값을 리턴 한다.

함수 int isupper (int c)

만약 c 가 대문자이면 참 값을 리턴 한다.

함수 int isalpha (int c)

만약 c 가 영문자이면 참값을 리턴 한다. 문자가 대문자이건 소문자이건 isalpha는 모두 참값을 리턴 한다. 어떤 지역들에서 isalpha에 의해 그것이 소문자의 경우든 대문자의 경우든지 참값이 리턴 되도록 더해진 문자들이 있을 수 있다. 하지만 표준C언어에서는 그렇게 더해진 문자들이 없다.

함수 int isdigit (int c)

만약 c 가 십진수('0'에서 '9')이면 참값을 리턴 한다.

함수 int isalnum (int c)

만약 c 가 영숫자이면 ( 문자이거나 숫자 ) 참값을 리턴 한다.; isalpha나 isdigit 에 의해 참값이 리턴 되는 문자는 isalnum에서도 참값을 리턴 한다.

함수 int isxdigit (int c)

만약 c 가 16진법의로 사용된 문자이면 참값을 리턴 한다. 16진수는 일반적 10진수인 '0'에서 '9'와 'A'에서 'F" 까지와 'a'에서 'f'까지의 문자를 포함한다.

함수 int ispunct (int c)

만약 c 가 구두문자인 경우 참값을 리턴 한다. 이것은 알파벳이나 공백문자는 아니지만 인쇄할 수 있는 어느 문자를 의미한다.

함수 int isspace (int c)

만약 c 가 공백문자(white space)이면 참값을 리턴 한다. 표준"C"에서는 오직 공백문자(white space)에 참값을 리턴 한다.
' ' space : 공백
'\f' formfeed : 종이 넘김
'\n' newline : 개행
'\r' carriage return : 복귀문자
'\t' horizontal tab : 수평탭
'\v' vertical tab : 수직탭

함수 int isbalnk (int c)

만약 c 가 blank 문자이면 참값을 리턴 한다.; 이것은 space나 tab을 말한다. 이 함수는 GNU 확장이다.

함수 int isgraph (int c)

만약 c 가 그래픽 문자이면 참값을 리턴 한다.; 이것은 상형문자와 연관된 문자로 공백문자(white space)는 그래픽으로 간주되지 않는다.

함수 int isprint (int c)

만약 c 가 프린트되는 문자면 참값을 리턴 한다. 프린트되는 문자란 모든 그래픽문자에 더하여 space (' ') 문자를 포함한다.

함수 int iscntrl (int c)

만일 c 가 제어문자이면 참값을 리턴 한다. ( 그것은 프린트가 가능하지 않은 문자이다. )

함수 int isascii (int c)

만일 c 가 US/UK 문자셋 안에 정의된 7비트 부호화 되지 않은 문자이면 참값을 리턴 한다. 이 함수는 BSD와 SVID확장이다.


4.2 변환

이 절은 문자들을 원하는 목적에 맞도록 변환을 수행하는 라이브러리 함수들에 대해 설명하고 있다. 예를 들어 toupper 변환은 그것이 가능하다면 대문자로 어느 한 문자를 변환한다. 만약 그 문자가 변환할 수 없는 것이라면 변환되지 않은 문자를 리턴 한다.

이 함수들을 변환시키기 원하는 문자를 int 형으로 인자를 받아서 문자를 변환시켜 리턴 한다. 만약 주어진 인수에 적용 불가능하다면 그 인수는 변환되지 않고 리턴 된다.

 
호환성에 대한 참조 : ANSI-C 이전에는 변환되지 않은 문자를 리턴 하는 대신에 인수가 변환에 적용불가능 하다면 이 함수들은 그냥 실패만 하고 만다. 그래서 적용 성을 위해서 단지 toupper(c) 라고 만 하는것보단 islower(c) ? toupper(c) : c 라고 쓰는 것이 필요하다.

이 함수들을 헤더파일 'ctype.h'에 정의되어 있다.

함수 int tolower (int c)

만약 c 가 대문자라면 그와 대응하는 소문자를 리턴 한다. 만약 c 가 대문자가 아니라면 c는 변화되지 않고 리턴 된다.

함수 int toupper (int c)

만약 c 가 소문자라면 그것에 대응하는 대문자를 리턴 한다. 그렇지 않으면 변화되지 않은 c를 리턴 한다.

함수 int toascii (int c)

이 함수는 c를, c의 가장 상위 비트를 클리어 함으로써 US/UK ASCII 문자셋 안에 존재하는 7비트 비부호화 문자 값으로 변환시킨다. 이 함수는 BSD와 SVID확장이다.

함수 int __tolower (int c)

이 함수는 소문자로 변환시키는 함수로 SVID에 호환성을 위해 제공되고 있다. 1.2.4절 [SVID] 를 보라.

함수 int __toupper (int c)

이 함수도 위의 __tolower(int c)처럼 SVID의 호환성을 위해 제공되는 함수로 문자를 대문자로 변환시키는 기능을 한다.