[운영체제실무] 문자클래스

·2021년 10월 18일
0

운영체제실무

목록 보기
2/3

📌 문자클래스

  • 문자열 구문 분석시 특정 문자 집합 또는 문자클래수(군)에 포함되는지 검사
  • 문자 클래스 멤버 함수
    • 헤더 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
profile
╰(⊡-⊡)و✎⮹

0개의 댓글