제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■
1.1 ASCII 코드 ASCII 코드 1byte로 표현, 256(28)개 집합 -> 2진수 8비트(16진수 2비트) 표준집합(0~127, 16진수 0x00~0x7f), 확장집합(128~255, 16진수 0x80~0xff) ASCII 코드의 표준집합 제어문자(0~31, 0x00~0x1f), 출력 가능한 문자(32~126), 제어문자(127) p666 ASCII 코드표(32 SP스페이스, 127 DEL삭제)
[예제 101] ASCII 코드 문자 출력 SCII 코드의 표준집합 중 출력가능한 문자(32~126)
[예제 101] ASCII 코드 문자 출력 #include <stdio.h> int main() { unsigned char i, count=0; for(i=32;i<127;i++) { printf("%c(%3d) ", i, i); count++; if(count==5) { count=0; printf("\n"); } return 0;
1.2 완성형 한글 코드 2byte로 표현, ASCII 코드의 확장집합 128이상 영역에 배당 사용빈도가 높은 한글 2,350자, 한자 4,888자, 특수문자 986자로 구성 한글(1st byte 0xb0~0xc8, 176~200, 25개, 2nd byte 0xa1~0xfe, 161~254, 94개) 한자(1st byte 0xca~0xfd, 202~253, 52개, 2nd byte 0xa1~0xfe, 161~254, 94개) 특수문자(1st byte 0xa1~0xac, 161~172, 12개, 2nd byte 0xa1~0xfe, 161~254, 94개)
[예제 102] 한글 출력 한글 “가”는 2byte의 문자열이므로 NULL 포함하여 3byte
[예제 102] 한글 출력 #include <stdio.h> int main() { char han[3]="가"; unsigned char code; code=han[0]; printf("%x %d\n", code, code); code=han[1]; return 0; }
[예제 103] 코드에 의한 한글 출력 코드에 의한 한글“가”출력
[예제 103] 코드에 의한 한글 출력 #include <stdio.h> int main() { unsigned char b1=0xb0; //1st byte unsigned char b2=0xa1; //2nd byte printf("%c%c\n",b1, b2); return 0; }
[예제 104] 0xb0로 시작 한글 출력 1st byte가 0xb0로 시작하는 한글 코드
[예제 104] 0xb0로 시작 한글 출력 #include <stdio.h> int main() { unsigned char b1=0xb0; unsigned char b2; for(b2=0xa1;b2<0xfe;b2++) { printf("%c%c%2x%2x ", b1, b2, b1, b2); if(b2%10==0) printf("\n"); } return 0;
1.3 한자 코드와 특수 기호 코드 한자(1st byte 0xca~0xfd, 202~253, 52개, 2nd byte 0xa1~0xfe, 161~254, 94개) 특수문자(1st byte 0xa1~0xac, 161~172, 12개, 2nd byte 0xa1~0xfe, 161~254, 94개)
[예제 105] 한자 출력 1st byte가 0xca로 시작하는 한자 코드
[예제 105] 한자 출력 #include <stdio.h> int main() { unsigned char b1=0xca; unsigned char b2; for(b2=0xa1;b2<=0xfe;b2++) { printf("%c%c%2x%2x ", b1, b2, b1, b2); if(b2%10==0) printf("\n"); } return 0;
[예제 106] 특수기호 출력 1st byte가 0xa1로 시작하는 특수기호 코드
[예제 106] 특수기호 출력 #include <stdio.h> int main() { unsigned char b1=0xa1; unsigned char b2; for(b2=0xa1;b2<0xfe;b2++) { printf("%c%c%2x%2x ", b1, b2, b1, b2); if(b2%6==0) printf("\n"); } return 0;
[예제 107] 특수기호 ■ 출력 특수기호 ■ 출력
[예제 107] 특수기호 ■ 출력 #include <stdio.h> int main() { unsigned char a1; unsigned char a2; a1=0xa1; a2=0xe1; printf("%c%c\n", a1, a2); return 0; }
[연습문제 01] 프로그램 완성 입력한 한 개의 문자가 한글인지 영문인지를 구분하는 프로그램을 완성 #include <stdio.h> int main(void) { unsigned char str[3]; printf("한 개의 문자 입력>"); scanf("%s", &str);
[연습문제 02] 프로그램 작성 다음 그림과 같은 형식으로 출력하는 프로그램을 작성 ■■■■■ ■ ■
[연습문제 03] 프로그램 작성 한글 문자열을 입력받아 2byte 완성형 코드(16진수)로 출력하는 프로그램을 작성 표준 입출력 함수, gets(); 한 줄의 문자열 입력 char str[40]; gets(str); #include <stdio.h> #include <string.h> //strlen함수 사용 int main(void) { char hangul[40];//최대 size 40byte int i, length; unsigned char code; printf("한글 문자열 입력>"); gets(hangul);
1.4 문자열의 저장과 처리 배열의 크기는 실제 저장될 문자 개수보다 1 크게 지정하는데 문자열 마지막에 NULL을 저장 배열이름 s는 포인터 상수이므로 s+0, *(s+2)와 같은 연산이 가능하다. s[2]와 *(s+2)는 동일 한글 문자열에 한 글자를 출력하려면 2byte로 저장되었기 때문에 %c%c를 이용 t+2는 포인터 변수 t가 가리키는 주소에 2를 더한 것으로 t가 가리키는 주소 이후의 2번째 주소임
[예제 109] 문자열 배열저장 #include <stdio.h> int main(void) { char s[]="swimming"; //9byte 사용 char t[5]="야구"; printf("s:%s\n", s); printf("s[2]:%c\n", s[2]); printf("t:%s\n", t); printf("t:%c%c\n", t[2],t[3]); return 0; }
[예제 110] 문자열 포인터에 저장 #include <stdio.h> int main(void) { char s[]="swimming"; char *t="야구공"; //포인터변수, 주소저장 printf("s:%s\n", s+0); printf("s[2]:%c\n", *(s+2));//포인터로 표시 printf("t:%s\n", t+0); printf("t:%s\n", t+2);//t가 가리키는 주소 이후의 //2번째 위치 이후 문자열 return 0; }
1.5 문자열의 길이 함수 strlen(st) NULL문자를 제외한 문자열 st의 길이(byte 수)를 계산, 헤더파일 <string.h>가 필요함수 strlen과 연산자 sizeof 비교
[예제 111] 문자열 길이 계산 #include <stdio.h> #include <string.h> int main(void) { char s[20]="abcd"; char *t="야구공"; printf("문자열s의 길이:%d\n", strlen(s)); printf("sizedo(s) :%d\n", sizeof(s)); printf("문자열t의 길이:%d\n", strlen(t)); printf("sizeof(t) :%d\n", sizeof(t)); return 0; }
1.6 대소문자 변환 tolower(c); 변수 c에 저장된 문자가 A~Z일 때 소문자로 변환 toupper(c); 변수 c에 저장된 문자가 a~z일 때 대문자로 변환 헤더파일 <ctype.h>가 필요 변환 방법은 해당 문자의 ASCII 코드 값을 변경한다. A(65), a(97), 97-65=32 대문자를 소문자로 변환시 +32, 소문자를 대문자로 변환시 –32
[예제 112] 문자열 대소문자 변환 #include <stdio.h> #include <ctype.h> #include <string.h> void upper_to_lower(char str[]); int main(void) { char test[10]="12AbCdEf"; upper_to_lower(test); printf("%s\n", test); return 0; } void upper_to_lower(char str[]) int i, length; length=strlen(str); for(i=0;i<length;i++) str[i]=tolower(str[i]);
1.7 문자열 역순으로 출력 영문의 경우 각 문자가 순서대로 저장되어 있으므로 제일 마지막 배열 첨자에서 시작하여 첫 번째 배열 첨자인 0까지 출력 제일 마지막 첨자는 (문자열의 길이 – 1)로 계산한다 for(i=strlen(st)-1; i>=0; i--); printf(“%c”, st[i]);
[예제 113] 영문문자열 역순출력 #include <stdio.h> #include <string.h> void reverse_english(char *st); int main(void) { char s[]="swimming"; printf("순방향 출력: %s\n", s); printf("역방향 출력: "); reverse_english(s); printf("\n"); return 0; } void reverse_english(char *st) int i; for(i=strlen(st)-1;i>=0;i--) printf("%c", st[i]);
[예제 113] 영문문자열 역순출력 한글 문자열을 역순으로 출력 for(i=strlen(st)-2; i>=0; i-=2); printf(“%c%c”, s[i], s[i+1]);
[연습문제 04] 프로그램 작성 한글 문자열을 역순으로 출력하는 프로그램을 작성 #include <stdio.h> #include <string.h> void reverse_hangul(char *st); int main(void) { char s[]="가나다라"; printf("순방향 출력: %s\n", s); printf("역방향 출력: "); reverse_hangul(s); printf("\n"); return 0; }
[연습문제 05] 프로그램 작성 문자열에 대해 소문자를 대문자로 변환하는 프로그램을 작성 #include <stdio.h> #include <ctype.h> #include <string.h> void lower_to_upper(char str[]); int main(void) { char test[10]="12abcdef"; lower_to_upper(test); printf("%s\n", test); return 0; }
[연습문제 06] 프로그램 작성 임의의 영문 문자열에 대해 소문자는 대문자로, 대문자는 소문자로 동시에 변환하는 프로그램을 작성 #include <stdio.h> #include <ctype.h> #include <string.h> void upper_lower_trans(char str[]); int main(void) { char test[20]="JahjdDF"; printf("origin : %s\n", test); upper_lower_trans(test); printf("result : %s\n", test); return 0; }