문자 평가 함수
① 문자 평가 함수들은 한 개 문자의 종류를 검사 또는 평가하는 함수로서 1개의 문자가 숫자인지, 문자인지, 제어문자인지, 대문자, 소문자인지의 여부를 평가한다.
② 문자평가함수는 is-로 시작되며, is-로 시작되는 함수는 헤더파일인"ctype.h"에 정의되어 있다.
(1)isalnum( ) 함수
① 영문자(A∼Z, a∼z) 또는 숫자(0∼9)인지를 평가하여 참이면 0이외의 값을 돌려주고, 거짓이면 0을 돌려준다.
② 형식
#include <ctype.h> int isalnum(c); int c; |
【 예제13-1 】하나의 문자를 읽어 들여 영문자 또는 숫자이면 alphanumeric를 출력하는 프로그램(ch13-1.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input data : "); c = getchar(); if(isalnum(c) != 0) printf("\n %c = alphanumeric\n", c); else printf("\n %c = Not alphanumeric\n", c); getch(); } |
▶ 실행결과
Input data : a a = alphanumeric
Input data : # a = Not alphanumeric |
(2)isalpha( ) 함수
① 영문자(A∼Z, a∼z)인가를 평가하여 참이면 0이외의 값을 돌려주고, 거짓이면 0을 돌려준다.
② 형식
#include <ctype.h> int isalpha(c); int c; |
【 예제13-2 】하나의 문자를 읽어 들여 영문자이면 alphabetic을 출력하는 프로그램(ch13-2.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input data : "); c = getchar(); if(isalpha(c) != 0) printf("\n %c = alphabetic\n", c); else printf("\n %c = Not alphabetic\n", c); getch(); } |
▶ 실행결과
Input data : a a = alphabetic
Input data : 3 a = Not alphabetic |
(3) iscntrl( ) 함수
① 제어문자인가를 평가하여 제어문자로 참이면 0이외의 값을 돌려주고, 거짓이면 0을
돌려준다.
② 형식
#include <ctype.h> int iscntrl(c); int c; |
【 예제13-3 】하나의 문자를 읽어 들여 제어문자이면 Input data is control character를 출력하는 프로그램(ch13-3.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input data :"); c = getchar(); if(iscntrl(c) != 0) printf("input data is conrol character\n"); else printf("input data is not control character\n"); getch(); } |
▶ 실행결과
Input data : a Input data is not control character
Input data : ^A Input data is control character |
(4) isdigit( ) 함수
① 0∼9인가를 평가하여 참이면 0이외의 값을 돌려주고, 거짓이면 0을 돌려준다.
② 형식
#include <ctype.h> int isdigit(c); int c; |
【 예제13-4 】하나의 문자를 읽어들여 숫자이면 digit을 출력하는 프로그램(ch13-4.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input data :"); if(isdigit(c) != 0) printf("\n %d = digit\n", c); else printf("\n %d = Not digit\n", c); getch(); } |
▶ 실행결과
Input data : a a = Not digit Input data : 9 a = digit |
(5) isupper( ) 함수
① 영문 대문자(A∼Z)인가를 평가하여 참이면 0이외의 값을 돌려주고, 거짓이면 0을 돌려준다.
② 형식
#include <ctype.h> int isupper(c); int c; |
【 예제13-5 】하나의 문자를 읽어 들여 영문 대문자이면 upper alphabetic을 평가하는 프로그램(ch13-5.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input data :"); c = getchar(); if(isupper(c) != 0) printf("\n %c = upper alphabetic\n", c); else printf("\n %c = Not upper alphanumeric\n", c); getch(); } |
▶ 실행결과
Input data : a a = Not upper alphabetic
Input data : A a = upper alphabetic |
(6) islower( ) 함수
① 영문 소문자(a∼z)인가를 평가하여 참이면 0이외의 값을 돌려주고, 거짓이면 0을
돌려준다.
② 형식
#include <ctype.h> int islower(c); int c; |
【 예제13-6 】다음과 같이 선언한 문자 중에서 소문자들을 출력하는 프로그램(ch13-6.c)
char a[9] = {'K', 'b', 's', 'M', 'b', 'c', 'S', 'b', 's'};
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { char c[9] = {'K', 'b', 's', 'M', 'b', 'c', 'S', 'b', 's'}; int i; clrscr(); for(i=0; i<9; i++) if(islower(c[i]) != 0) printf("%c", c[i]); getch(); } |
▶ 실행결과
bsbcbs |
(7) isspace( ) 함수
① 공백인가를 평가하여 참이면 0이외의 값을 돌려주고, 거짓이면 0을 돌려준다.
② 형식
#include <ctype.h> int isspace(c); int c; |
【 예제13-7 】공백이 입력되기 전까지 문자를 출력하는 프로그램(ch13-7.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { char c; clrscr(); printf("Input string : "); c = getchar(); do { putchar(c); c = getchar(); } while(isspace(c) == 0); getch(); } |
▶ 실행결과
Input string : seoul korea seoul |
13-2. 문자 변환 함수
① 소문자를 대문자로, 대문자를 소문자로 변환하거나 또는 ASCII 코드가 아닌 값을 ASCII 코드 값으로 바꾸어 준다.
② 문자변환함수는 헤더파일인 "ctype.h"에 정의되어 있다.
(1) toascii( ) 함수
① ASCII 코드로 변환시켜 주는 함수
② 형식
#include <ctype.h> int toascii(c); int c; |
【 예제13-8 】지정 문자를 ASCII 코드로 변환시켜 주는 프로그램(ch13-8.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input character :"); c = getchar(); printf("ASCII CODE = %x\n", toascii(c)); printf("DECIMAL NUMBER = %d\n", c); getch(); } |
▶ 실행결과
Input character : A ASCII CODE = 41 DECIMAL NUMBER = 65 |
(2) tolower( ) 함수
① c가 대문자이면 소문자로 변환시켜 준다.
② 형식
#include <ctype.h> int tolower(c); int c; |
【 예제13-9 】지정문자가 대문자이면 소문자로 변환시켜 주는 프로그램(ch13-9.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input sring :"); while((c = getchar()) != EOF) putchar(tolower(c)); getch(); } |
▶ 실행결과
input string : MBC mbc |
(3) toupper( ) 함수
① c가 소문자이면 대문자로 변환시켜 준다.
② 형식
#include <ctype.h> int toupper(c); int c; |
【 예제13-10 】지정문자가 소문자이면 대문자로 변환시켜 주는 프로그램(ch13-10.c)
▶ 프로그램
#include <stdio.h> #include <ctype.h> main() { int c; clrscr(); printf("Input sring :"); while((c = getchar()) != EOF) putchar(toupper(c)); getch(); } |
▶ 실행결과
input string : mbc MBC |
13-3. 문자열의 조작함수
문자열 조작 함수는 헤더파일인 "string.h"에 정의되어 있다.
(1) strcpy( ) 함수 및 strncpy( ) 함수
① 문자열을 복사하는 함수
② 형식
#include <string.h> char *strcpy(cd, str); char *strncpy(cd, str, len); char *cd; ☞ 문자열이 복사되는 배열 char *str; ☞ 복사하는 문자열 int len; ☞ 복사하는 문자열의 길이 |
③ strcpy( )함수
"cd"가 가리키는 버퍼에 "str"이 가리키는 문자열을 복사하고, 함수값으로 "cd"의 값을 반환한다.
④ strncpy( ) 함수
앞에서부터 최대 len 문자까지를 복사한다. 이때 "cd"는 "복사 문자열의 길이 + 1"크기 이상을 확보해 두어야 한다.
【 예제13-11 】문자열 str을 배열 cd에 copy하는 프로그램(ch13-11.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char cd[20] = " "; char *str="Temple of the king"; clrscr(); printf("Before cd[20] data = %s\n", cd); strcpy(cd, str); printf("After cd[20] data = %s\n", cd); getch(); } |
▶ 실행결과
Before cd[20] data = After cd[20] data = Temple of the king |
【 예제13-12 】문자열 str에서 6개의 문자를 cd에 복사하는 프로그램(ch13-12.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *cd; char *str="Temple of the king"; int len = 6; clrscr(); printf("Original *str data = %s\n", str); printf("Before cd[20] data = %s\n", cd); strncpy(cd, str, len); printf("After cd[20] data = %s\n", cd); getch(); } |
▶ 실행결과
Original *str data = Temple of the king Before cd[20] data = After cd[20] data = Temple |
(2) strcat( ) 및 strncat( ) 함수
① 문자열을 연결시키는 함수
② 형식
#include <string.h> char *strcat(buf, str); char *strncat(buf, str, len); char *cd; char *str; char *buf; int len; |
③ strcat( ) 함수
"buf"가 가리키는 버퍼에 들어있는 문자열의 뒷부분에 "str"이 가리키는 문자열을 연결시킨다.
④ strncat( ) 함수
"str"이 가리키는 문자열의 최대 "len" 문자까지만 "buf"가 가리키는 버퍼의 문자열에 연결시켜 준다.
【 예제13-13 】문자열 buf와 문자열 str을 연결하여 출력하는 프로그램이다.(ch13-13.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *buf = "Temple"; char *str=" of the king"; clrscr(); printf("Original *buf data = %s\n", buf); printf("Original *str data = %s\n", str); strcat(buf, str); printf("After *buf data = %s\n", buf); getch(); } |
▶ 실행결과
Original *buf data = Temple Original *str data = of the king After *buf data = Temple of the king |
【 예제13-14 】문자열 buf와 문자열 str의 11개의 문자를 연결하는 프로그램(ch13-14.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *buf = "Temple"; char *str=" of the king"; char *p; int len = 11; clrscr(); printf("Original *buf data = %s\n", buf); printf("Original *str data = %s\n", str); p = strncat(buf, str, len); printf("After *p data = %s\n", p); getch(); } |
▶ 실행결과
Original *buf data = Temple Original *str data = of the king After *p data = Temple of the kin |
(3) strchr( ) 함수 및 strrchr( ) 함수
① 지정된 문자의 최초 위치 탐색과 최후 위치 탐색을 위한 함수
② 형식
#include <string.h> char *strchr(string, c); char *strrchr(string, c); char *string; ☞ 탐색되는 문자열 char *c; ☞ 찾고 싶은 문자열 |
③ strchr( ) 함수
"string"내에서 찾고 싶은 문자 c의 내용이 발견되면 발견된 최초의 위치를 반환하고 발견되지 않으면 null 값을 반환한다. 즉, 최초의 문자가 발견된 위치를 반환시켜 준다.
④ strrchr( ) 함수
"string"내에서 찾고 싶은 문자 c의 내용이 발견되면 발견된 최후 위치를 반환하고 발견되지 않으면 null값을 반환한다. 즉, 최후의 문자가 발견된 위치를 반환시켜 준다.
【 예제13-15 】문자열 string에서 e가 발견된 최초의 주소를 구하는 프로그램(ch13-15.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string="Temple of the king"; char *c; clrscr(); printf("*string data = %s\n", string); printf("*string, address = %x\n", string); c = strchr(string, 'e'); printf("'e', address = %x\n", c); printf("c = %s\n", c); getch(); } |
▶ 실행결과
*string data = Temple of the king *string, address = 194 'e', address = 195 |
【 예제13-16 】문자열 string에서 e가 기억된 마지막 주소를 구하는 프로그램(ch13-16.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string="Temple of the king"; char *c; clrscr(); printf("*string data = %s\n", string); printf("*string, address = %x\n", string); c = strrchr(string, 'e'); printf("last address,'e' = %x\n", c); getch(); } |
▶ 실행결과
*string data = Temple of the king *string, address = 194 last address,'e' = 1a0 |
(4) strcmp( ) 함수 및 strncmp( ) 함수
① 문자열을 비교하는 함수로 앞에서 한 개의 문자씩 사전식 순서로 비교하여 그 결과를
반환한다.
② 형식
#include <string.h> int strcmp(string1, string2); int strncmp(string1, string2, size); char *string1, *string2; ☞ 비교할 문자열 unsigned size; ☞ 비교할 길이 |
③ 2개의 문자열을 비교한 후 다음과 같이 결과를 반환한다.
- string1 > string2 이면 양수값을 반환한다.
- string1 = string2 이면 0을 반환한다.
- string1 < string2 이면 음수값을 반환한다.
④ strcmp(p, q) 함수
문자열 p와 q를 비교하여 p의 문자열이 알파벳순으로 q보다 앞이면 음수값, 뒤이면 양수값을 반환한다.
【 예제13-17 】문자열 string1과 문자열 string2를 비교하는 프로그램(ch13-17.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string1="America"; char *string2="Korea"; int i; clrscr(); printf("*string1 data = %s\n", string1); printf("*string2 data = %s\n", string2); i = strcmp(string1, string2); printf("value i = %d\n", i); if(i != 0) printf("string1 not equal to string2\n"); else printf("string1 equal to string2\n"); getch(); } |
▶ 실행결과
*string1 data = America *string2 data = Korea value i = -10 string1 not equal to string2 |
【 예제13-18 】문자열 string1과 문자열 string2를 비교하는 프로그램(ch13-18.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string1="Banana"; char *string2="Bingo"; int i; unsigned len = 5; clrscr(); printf("*string1 data = %s\n", string1); printf("*string2 data = %s\n", string2); i = strncmp(string1, string2, len); printf("value i = %d\n", i); if(i != 0) printf("string1 not equal to string2\n"); else printf("string1 equal to string2\n"); getch(); } |
▶ 실행결과
*string1 data = Banana *string2 data = Bingo value i = -8 string1 not equal to string2 |
(5) strset( )함수 및 strnset( ) 함수
① 문자열을 변경시키는 함수
② 형식
#include <string.h> char *strset(string, c); char *strnset(string, c, len); char *string; int c; int len; |
③ strset( ) 함수
문자열 string이 가리키는 곳의 모든 문자를 c와 같은 문자로 전부 변경시킨다.
④ strnset( ) 함수
문자열 string이 가리키는 곳의 첫 번째 문자부터 n개의 문자만 c와 같은 문자로 전부 변경시킨다.
【 예제13-19 】포인터 string이 가리키는 "SONATA" 문자열을 "KKKKKK"로 바꾸는 프로그램(ch13-19.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string="SONATA"; clrscr(); printf("*string data = %s\n", string); strset(string, 'K'); printf("after string data = %s\n", string); getch(); } |
▶ 실행결과
*string data = SONATA after string data = KKKKKK |
【 예제13-20 】포인터 string이 가리키는 "SONATA" 문자열을 "SONKKK"로 바꾸는 프로그램(ch13-20.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string="SONATA"; clrscr(); printf("*string data = %s\n", string); strset(string+3, 'K'); printf("after string data = %s\n", string); getch(); } |
▶ 실행결과
*string data = SONATA after string data = SONKKK |
【 예제13-21 】포인터 string이 가리키는 "SONATA" 문자열을 "KKKATA"로 바꾸는 프로그램(ch13-21.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string="SONATA"; int len = 3; clrscr(); printf("*string data = %s\n", string); strnset(string, 'K', len); printf("after string data = %s\n", string); getch(); } |
▶ 실행결과
*string data = SONATA after string data = KKKATA |
(6)strlen( ) 함수
① 문자열의 길이를 알아내는 함수
② "\0"을 포함하지 않은 문자열 길이를 함수값으로 반환시켜 준다.
③ 형식
#include <string.h> unsigned strlen(string); char *string; |
【 예제13-22 】문자열 string의 문자열 길이를 구하는 프로그램(ch13-22.c)
▶ 프로그램
#include <stdio.h> #include <string.h> main() { char *string="SONATA"; int len ; clrscr(); printf("*string data = %s\n", string); len = strlen(string); printf("string length = %d\n", len); getch(); } |
▶ 실행결과
*string data = SONATA string length = 6 |
(7) atoi( ) 함수
① 문자열을 정수로 변환시키는 함수
② 형식
#include <stdlib.h> int atoi(string); char *string; |
【 예제13-23 】문자열 string1과 문자열 string2를 정수로 변환하여 덧셈하는 프로그램(ch13-23.c)
▶ 프로그램
#include <stdio.h> #include <stdlib.h> main() { char *string1="1234"; char *string2="4321"; int i; clrscr(); printf("*string1 data = %s\n", string1); printf("*string2 data = %s\n", string2); i = atoi(string1) + atoi(string2); printf("after integer data = %d\n", i); getch(); } |
▶ 실행결과
*string1 data = 1234 *string2 data = 4321 after integer data = 5555 |
(8) strlwr( ) 함수, strupr( ) 함수, strrev( ) 함수
① strlwr( ) 함수 : 소문자화 하는 함수
【 예제13-24 】"KBS"를 "kbs"로 변환하는 프로그램(ch13-24.c)
▶ 프로그램
#include <stdio.h> #include <stdlib.h> main() { char *string1="KBS"; char *string2; clrscr(); printf("*string1 data = %s\n", string1); string2 = strlwr(string1); printf("*string2 data = %s\n", string2); getch(); } |
▶ 실행결과
*string1 data = KBS *string2 data = kbs |
② strupr( ) 함수 : 대문자화 하는 함수
【 예제13-25 】"kbs"를 "KBS"로 변환하는 프로그램(ch13-25.c)
▶ 프로그램
#include <stdio.h> #include <stdlib.h> main() { char *string1="kbs"; char *string2; clrscr(); printf("*string1 data = %s\n", string1); string2 = strupr(string1); printf("*string2 data = %s\n", string2); getch(); } |
▶ 실행결과
*string1 data = kbs *string2 data = KBS |
③ strrev( ) 함수 : 문자 배열을 반대로 하는 함수
【 예제13-26 】"Computer"를 "retupmoC"로 변환하는 프로그램(ch13-26.c)
▶ 프로그램
#include <stdio.h> #include <stdlib.h> main() { char *string1="Computer"; char *string2; clrscr(); printf("*string1 data = %s\n", string1); string2 = strrev(string1); printf("*string2 data = %s\n", string2); getch(); } |
▶ 실행결과
*string1 data = Computer *string2 data = retupmoC |
13-4. 문자열 변환 함수
출력하고자 하는 문자열을 주어진 형식에 따라 편집하여 주는 함수
(1) sprintf( ) 함수
① 문자열을 지정된 서식에 따라 출력을 변환하는 함수
② 형식
#include <stdlib.h> int sprintf(buffer, format, 출력자료1, 출력자료2, …); char *buffer; ☞ 출력할 문자열 char *format; ☞ 서식 제어 문자열 |
③ 출력 자료들을 "format"에 표시된 변환 규칙에 따라 buffer에 넣는다. 편집이 끝난 후에는 '\0'을 제일 끝에 추가시킨다.
【 예제13-27 】다음 프로그램을 실행하라.(ch13-27.c)
char buf1[10], buf2[14], *p = "KOREA";
① sprintf(buf1, "seoul%d%c", 123, '!');
buf1의 내용:
s | e | o | u | l | 1 | 2 | 3 | ! | \0 |
② sprinf(buf2, "%-5s = %5d", p, 123);
buf2의 내용:
K | O | R | E | A | = | 1 | 2 | 3 | \0 |
▶ 프로그램
#include <stdio.h> #include <stdlib.h> main() { char buf1[10], buf2[14]; char *p="KOREA"; clrscr(); sprintf(buf1, "seoul%d%c", 123, '!'); puts(buf1); sprintf(buf2, "%5s = %5d",p, 123); puts(buf2); getch(); } |
▶ 실행결과
seoul123! KOREA = 123 |
(2) sscanf( ) 함수
① 표준 입력에서 서식 지정된 값을 읽어 들인다.
② 형식
#include <stdlib.h> int sscanf(buffer, format, 입력자료1, 입력자료2, …); char *buffer; ☞ 입력할 문자열 char *format; ☞ 서식 제어 문자열 |
③ "buffer" 내의 자료를 "format"에 표시된 변환 규칙에 따라 입력자료1, 입력자료2, … 등에 입력시켜 준다. 이 함수의 반환 값은 입력이 성공되면 입력 변수의 개수가 되며, 실패시에는 -1이 된다.
【 예제13-28 】다음 프로그램을 실행하여라.(ch13-28)
char *buf = "KOREA 12345 3.14", name[10];
float f;
int i, j;
sscanf(buf, "%s%3d%d%f", name, &i, &j, &f);
▷ buf의 내용 :
K | O | R | E | A | 1 | 2 | 3 | 4 | 5 | 3 | . | 1 | 4 | \0 |
▷ 문자 변수 name의 내용 :
K | O | R | E | A | \0 |
▷ 정수형 변수 i, j와 실수형 변수 f의 내용 :
i의 내용 :
1 | 2 | 3 |
j의 내용 :
4 | 5 |
f의 내용 :
3 | . | 1 | 4 |
▶ 프로그램
#include <stdio.h> #include <stdlib.h> main() { char *buf = "KOREA 12345 3.14", name[10]; float f; int i, j; clrscr(); sscanf(buf, "%s%3d%d%f", name, &i, &j, &f); printf("name = %s\ni = %d\nj = %d\nf = %.2f\n", name, i, j, f); getch(); } |
▶ 실행결과
name = KOREA i = 123 j = 45 f = 3.14 |
출처:http://www.daejin.or.kr/home/hslee2/TC/chap13/chap13-1.htm