- 문자열 구문 분석시 특정 문자 집합 또는 문자클래수(군)에 포함되는지 검사
- 문자 클래스 멤버 함수
- 헤더 ctype.h 포함 필요
- 문자 클래스 검사
- int isalpha(int c) : 매개변수 c가 문자(Alphabet)인지 아닌지 식별하여 문자이면 1, 아니면 0반환
- int isupper(int c) : 매개변수 c가 대문자이면 1, 아니면 0 반환
- int islower(int c) : 매개변수 c가 소문자이면 1, 아니면 0 반환
- 숫자 클래스 검사
- int isdigit(int c) : 매개변수 c가 숫자인지 식별하여 숫자이면 1, 아니면 0 반환
- int isxdigit(int c) : 매개변수 c가 16진수(0~9, A~F, a~f)이면 0이 아닌 값, 아니면 0 반환
- 문자 & 숫자 클래스 검사
- int isalnum(int c) : 매개변수 c가 문자 또는 숫자이면 0이 아닌 값, 아니면 0 반환
- 공백/ 구두/ 제어 문자 클래스 검사
- int isspace(int c) : 매개변수 c가 공백문자, 탭, 캐리지 리턴, 개행문자, 수직탭, 폼 피드면 0이 아닌 값을, 그 밖에는 0을 반환
- int ispunct(int c) : 매개변수 c가 구두문자이면 0이 아닌 값을, 아니면 0을 반환
- int iscntrl(int c) : 매개변수 c가 제어문자(Ascii 0~31)에 해당되면 0이 아닌 값을, 아니면 0을 반환
✍ 실습
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
void outputline(char*);
char* inputline(void);
int main(int argc, char** argv) {
char* line; //입력받는 문자열
int al_cnt = 0; //숫자 카운트
int num_cnt = 0; //문자
int punct_cnt = 0; //구두점
while ((line = inputline()) != NULL) { //문자열이 끝날때까지 입력을 받음
while (*line != NULL) { //문자열이 끝날때까지 읽음 문자 한 자
if (isalpha(*line)) { //문자이면
al_cnt++;
}
else if (isdigit(*line)) { //숫자이면
num_cnt++;
}
else if (ispunct(*line)) { //구두점이면
punct_cnt++;
}
line++; //그 다음 문자로 포인트 이동
}
}
printf("alphabet count = %d\n", al_cnt);
printf("number count = %d\n", num_cnt);
printf("punctation count = %d\n", punct_cnt);
}
✍ 입력
one
2
three
4
four
5
.
,,,
:;!
💻 출력
alphabet count = 12
number count = 3
punctation count = 7
- int toupper(int c) : 매개변수 c가 소문자인 경우 대문자로 변경
- int tolower(int c) : 매개변수 c가 대문자인 경우 소문자로 변경
- int toascii(int c) : 매개변수 c 중 8비트를 잘라 asci 문자로 변경
✍ 실습
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char** argv) {
int c;
while ((c = inputchar()) >= 0) { //문자 하나 읽어서
if (isupper(c))
outputchar(tolower(c)); //대문자면 소문자로
else if (islower(c))
outputchar(toupper(c)); //소문자면 대문자로
else
outputchar(c); //둘 다 아니면
}
exit(0);
}
✍ 입력
One
twO
three
fouR
Five
💻 출력
oNE
TWo
THREE
FOUr
fIVE