문자 평가 함수
① 문자 평가 함수들은 한 개 문자의 종류를 검사 또는 평가하는 함수로서 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();
}
|
▶ 실행결과
(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();
}
|
▶ 실행결과
(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();
}
|
▶ 실행결과
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의 내용:
② sprinf(buf2, "%-5s = %5d", p, 123);
buf2의 내용:
▶ 프로그램
#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();
}
|
▶ 실행결과
(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의 내용 :
▷ 정수형 변수 i, j와 실수형 변수 f의 내용 :
i의 내용 :
j의 내용 :
f의 내용 :
▶ 프로그램
#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