Microsoft PowerPoint - [CPI16] Lecture 10 - 문자열.pptx

Similar documents
13 주차문자열의표현과입출력

11장 포인터

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

11장 포인터

11장 포인터

쉽게풀어쓴 C 언어 Express 제 12 장문자와문자열 이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하

이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하고있다. 이번장에서는 C 에서의문자열처리방법에대하여자세히살펴볼것입니다. 2

ch13

11장 포인터

11장 포인터

<4D F736F F F696E74202D20C1A63132C0E520B9AEC0DABFCD20B9AEC0DABFAD>

Microsoft PowerPoint - chap-12.pptx

11장 포인터

Microsoft PowerPoint - 제12장 문자열(강의)

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

Microsoft PowerPoint - 10장 문자열 pptx

Microsoft PowerPoint - chap06-4 [호환 모드]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

YRRZBRRLMCEQ.hwp

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - 06_(C_Programming)_(Korean)_Characters_Strings

Microsoft PowerPoint - 제9강 문자열

PowerPoint Presentation

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

설계란 무엇인가?

11장 포인터

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap06-1Array.ppt

歯9장.PDF

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

중간고사

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>


<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

C 언어 프로그래밊 과제 풀이

C 프로그램의 기본

02장.배열과 클래스

Microsoft PowerPoint - Chapter_08.pptx

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

OCW_C언어 기초

PowerPoint Presentation

PowerPoint Presentation

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - chap08.ppt

untitled

Microsoft PowerPoint - 제11장 포인터(강의)

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

untitled

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - 제11장 포인터

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

ch15

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - [2009] 02.pptx

PA for SWE2007

03 상수, 변수, 자료형

Microsoft PowerPoint - chap-11.pptx

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint Presentation

Chapter_06

Microsoft PowerPoint - chap07.ppt [호환 모드]

歯7장.PDF

untitled

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

chap7.PDF

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

PowerPoint 프레젠테이션

11장 포인터

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - chap11.ppt [호환 모드]

OCW_C언어 기초

Microsoft PowerPoint - 제11강 파일 처리

Microsoft PowerPoint - C++ 5 .pptx

chap7.key

쉽게 풀어쓴 C 프로그래밍

문서의 제목 나눔명조R, 40pt

PA for SWE2007

PowerPoint Presentation

Microsoft PowerPoint - Chapter_07.pptx

C++ Programming

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - chap06-8 [호환 모드]

Microsoft PowerPoint - chap11-포인터의활용.pptx

PA0 for SSE2033

Microsoft PowerPoint APUE(Intro).ppt

쉽게 풀어쓴 C 프로그래밍

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

Transcription:

이번장에서학습할내용 제 12 장문자와문자열 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하고있다. 이번장에서는 C 에서의문자열처리방법에대하여자세히살펴볼것이다. 문자열표현방법 문자열 (string): 문자들이여러개모인것 "A" "Hello World!" " 변수 score 의값은 %d 입니다 문자열변수 변경가능한문자열을저장할수있는변수 어디에저장하면좋은가? H 문자열상수 하나의문자는 char 형변수로저장 H E L L o \0 문자열은 char 형배열로저장 NULL 문자 NULL 문자 : 문자열의끝을나타낸다. S E O U 문자열은어디서종료되는지알수가없으므로표시를해주어야한다. seou, seoul, seoul#, seoul#%,...??? L 쓰레기값 s e o u l # %? & $ str[0] str[1] str[2] str[3] str[4] str[5] str[6] str[7] str[8] str[9] 끝 \0 NULL 문자는문자열의끝을나타냅니다. 1

// 문자상수 char code1 = 'A'; char code2 = 65; 문자변수와문자상수 문자변수 printf("code1=%c, code1=%d\n", code1,code1); printf("code2=%c, code2=%d\n", code2,code2); 문자상수 65 // 아스키코드출력 unsigned char code; 아스키코드출력 32 : ( 공백 ) 부터 127 : 까지출력 for(code = 32; code < 128; code++) printf(" 아스키코드 %d 은 %c 입니다.\n", code, code); 실행결과는? code1=a, code1=65 code2=a, code2=65 예제 #1 문자배열의초기화 int i; char str[4]; str[0] = 'a'; str[1] = 'b'; 문자배열에들어있는문자들을하나씩출력하여보자. 문자배열에저장된문자열을출력할때는 %s 를사용하면되지만여기서는문자열처리의기본적인방법을실감하기위하여문자배열에들어있는문자들을하나씩화면에출력하다가 NULL 문자가나오면반복을종료하도록하였다. char str[4] = 'a', 'b', 'c', '\0' ; char str[4] = "abc ; char str[4] = "abcdef"; str[2] = 'c'; str[3] = '\0'; char str[6] = "abc"; i= 0; abc while(str[i]!= '\0') printf("%c", str[i]); char str[4] = ""; i++; char str[] = "abc"; 2

문자열의출력 예제 #2 char str[] = abc ; printf( %s, str); abc char str1[6] = "Seoul ; char str2[3] = 'i', 's, \0 ; char str3[] = "the capital city of Korea. ; Seoul is the capital city of Korea. printf("%s %s %s\n", str1, str2, str3); char str[] = abc ; printf(str); S e o u l \0 str1[0] str1[1] str1[2] str1[3] str1[4] str1[5] str1 i s \0 str2[0] str2[1] str2[2] str2 t h e... K o r e a \0 str3[ ] str3[ ] str3[ ] str3[ ].... str3[ ] str3[ ] str3[ ] str3[ ] str3[ ] str3[ ] str3 예제 #3 문자열길이계산예제 char src[] = "The worst things to eat before you sleep"; char dst[100]; int i; printf(" 원본문자열 =%s\n", src); for(i=0 ; src[i]!= NULL ; i++) NUL 문자가나올때까지반복하면서각각의문자들을새로운배열로복사한다. dst[i] = src[i]; dst[i] = NULL; printf(" 복사된문자열 =%s\n", dst); // 문자열의길이를구하는프로그램 char str[30] = "C language is easy"; int i= 0; while(str[i]!= 0) i++; printf(" 문자열 \"%s\" 의길이는 %d입니다.\n", str, i); 실행결과는? 원본문자열 =The worst things to eat before you sleep 복사된문자열 =The worst things to eat before you sleep 3

문자배열을실행시간에변경 1. 문자배열의각각의원소를개별적으로변경 str[0] = 'W'; str[1] = 'o'; str[2] = 'r'; str[3] = 'l'; str[4] = 'd'; str[5] = '\0'; 실행도중에문자열을변경하는방법이죠 문자열상수 문자열상수 : HelloWorld 와같이프로그램소스안에포함된문자열 문자열상수는메모리영역중에서텍스트세그먼트 (text segment) 에저장 char *p = "HelloWorld"; 위문장의정확한의미는무엇일까요? 2. strcpy() 를사용하여문자열을문자배열에복사 strcpy(str, "World"); // 추후에학습 문자열상수 문자열상수 char *p = "HelloWorld"; char *p = "HelloWorld"; p[0] = A ; // 또는 strcpy(p, Goodbye ); p 를통하여텍스트세그먼트에문자를저장하려면오류가발생한다. 4

문자열상수 중간점검 char *p = "HelloWorld"; p = "Goodbye"; OK! C 에서문자열은어떻게정의되는가? 문자열에서 NULL 문자의역할은무엇인가? NULL 문자의아스키코드값은얼마인가? NULL 문자로끝나지않는문자열을출력하면어떻게되는가? 중간점검 문자입출력라이브러리 B, 'B', "B" 의차이점을설명하라. 변경가능한문자열은어디에저장되는가? 문자열의크기보다문자배열의크기를하나더크게하는이유는무엇인가? 입출력함수 설명 int getchar(void) 하나의문자를읽어서반환한다. void putchar(int c) 변수 c에저장된문자를출력한다. int getch(void) 하나의문자를읽어서반환한다 ( 버퍼를사용하지않음 ). void putch(int c) 변수 c에저장된문자를출력한다 ( 버퍼를사용하지않음 ). scanf("%c", &c) 하나의문자를읽어서변수 c에저장한다. printf("%c", c); 변수 c에저장된문자를출력한다. 문자배열을문자열로초기화하는방법을아는대로설명하라. A B C... 프로그램 5

getchar(), putchar() 버퍼링 // getchar() 의사용 int ch; // 정수형에주의 while( (ch = getchar())!= EOF ) putchar(ch); End Of File 을나타내는문자, EOF 는정수형이다. 엔터키를쳐야만입력을받는이유 모든문자는일단버퍼로간다. 엔터키 (\n) 가입력되면모두프로그램으로간다. char ch; 실행결과는? 키보드 버퍼 ch = getchar();...... 프로그램 _getch(), _putch() _getch(), _getche(), getchar() #include <conio.h> int ch; while( (ch = _getch())!= 'q' ) _putch(ch); ABCDEFGH 버퍼를사용하지않는다, 에코도없음! 헤더파일 버퍼사용여부 에코여부 응답성 문자수정여부 getchar() <stdio.h> 사용함 ( 엔터키를눌러입력됨 ) 에코 줄단위 가능 _getch() <conio.h> 사용하지않음 에코하지않음 문자단위 불가능 _getche() <conio.h> 사용하지않음 에코 문자단위 불가능 용도에맞는것을골라사용하세요! 버퍼가없이바로받으려면 getch() 를사용합니다. 6

중간점검 getchar() 와 _getch() 가다른점은무엇인가? 하나의문자를입력받는방법에는몇가지나있는가? 문자열입출력라이브러리함수 입출력함수 설명 int scanf("%s", s) 문자열을읽어서문자배열 s[] 에저장 int printf("%s", s) 배열 s[] 에저장되어있는문자열을출력한다. char *gets(char *s) 한줄의문자열을읽어서문자배열 s[] 에저장한다. int puts(const char *s) 배열 s[] 에저장되어있는한줄의문자열을출력한다. Hello World!... 프로그램 gets() 와 puts() 문자열입출력 gets() 와 puts() 문자열입출력 char *gets(char *buffer); int puts(const char *str); gets() 표준입력으로부터엔터키가나올때까지한줄의라인을입력 문자열에줄바꿈문자 ('\n') 는포함되지않으며대신에자동으로 NULL 문자 ('\0') 를추가한다. 입력받은문자열은 buffer 가가리키는주소에저장된다. char *gets(char *buffer); int puts(const char *str); puts() str 이가리키는문자열을받아서화면에출력 NULL 문자 ('\0') 는줄바꿈문자 ('\n') 로변경 char *menu = " 파일열기 : open, 파일닫기 : close"; puts(str); 7

예제 char name[100]; char address[100]; printf(" 이름을입력하시오 : "); gets(name); printf(" 현재거주하는주소를입력하시오 : "); gets(address); puts(name); puts(address); 한단어이상을입력받을때에사용한다. 중간점검 한줄의텍스트를입력받는문장을작성하라. 사용자로부터하나의단어를입력받는문장을작성하라. 이름을입력하시오 : 홍길동현재거주하는주소를입력하시오 : 서울시종로구 100 번지홍길동서울시종로구 100 번지 문자처리라이브러리함수 문자처리라이브러리함수 문자를검사하거나문자를변환한다. 함수 설명 isalpha(c) c가영문자인가?(a-z, A-Z) isupper(c) c가대문자인가?(a-z) islower(c) c가소문자인가?(a-z) isdigit(c) c가숫자인가?(0-9) isalnum(c) c가영문자이나숫자인가?(a-z, A-Z, 0-9) isxdigit(c) c가 16진수의숫자인가?(0-9, A-F, a-f) isspace(c) c가공백문자인가?(, \n', '\t', '\v', '\r') ispunct(c) c가구두점문자인가? isprint(c) C가출력가능한문자인가? iscntrl(c) c가제어문자인가? isascii(c) c가아스키코드인가? 문자를검사하거나문자를변환한다. 함수 설명 toupper(c) c를대문자로바꾼다. tolower(c) c를소문자로바꾼다. toascii(c) c를아스키코드로바꾼다. 8

#include <ctype.h> int c; while((c = getchar())!= EOF) if( islower(c) ) c = toupper(c); putchar(c); abcdef ABCDEF ^Z EOF 를키보드에서입력하려면 ^Z 예제 소문자인지검사대문자로변환 예제 #include <conio.h> #include <ctype.h> int c; while((c = getch())!= 'z') printf("------------------------\n"); printf("isdigit(%c) = %d\n", c, isdigit(c)); printf("isalpha(%c) = %d\n", c, isalpha(c)); printf("islower(%c) = %d\n", c,islower(c)); printf("ispunct(%c) = %d\n", c, ispunct(c)); printf("isxdigit(%c) = %d\n", c,isxdigit(c)); printf("isprint(%c) = %d\n", c,isprint(c)); printf("------------------------\n\n"); 숫자인지검사알파벳인지검사소문자인지검사구두점문자인지검사 16진수인지검사출력가능한지검사 ------------------------ isdigit(') = 0 isalpha(') = 0 islower(') = 0 ispunct(') = 16 isxdigit(') = 0 isprint(') = 16 ------------------------ Dept. of Electronics... Eng., Konkuk Univ. 중간점검 문자처리라이브러리함수를사용하려면포함시켜야하는헤더파일은무엇인가? getchar() 와 getch() 가다른점은무엇인가? ispunct('.') 의반환값은무엇인가? toupper('a') 의반환값은무엇인가? 문자열처리라이브러리 함수 설명 strlen(s) 문자열 s의길이를구한다. strcpy(s1, s2) s2를 s1에복사한다. strcat(s1, s2) s2를 s1의끝에붙여넣는다. strcmp(s1, s2) s1과 s2를비교한다. strncpy(s1, s2, n) s2의최대n개의문자를 s1에복사한다. strncat(s1, s2, n) s2의최대n개의문자를 s1의끝에붙여넣는다. strncmp(s1, s2, n) 최대 n개의문자까지 s1과 s2를비교한다. strchr(s, c) 문자열 s안에서문자 c를찾는다. strstr(s1, s2) 문자열 s1에서문자열 s2를찾는다. W o r l d H e l l o 9

문자열의길이 strlen( Hello ) 는 5 를반환 문자열길이 문자열복사 char dst[6]; char src[6] = Hello"; strcpy(dst, src); 문자열복사 src H e l l o \0 dst H e l l o \0 문자열연결 예제 dst 문자열연결 char dst[12] = "Hello"; char src[6] = "World"; strcat(dst, src); H e l l o \0 src W o r l d \0 // strcpy 와 strcat #include <string.h> char string[80]; strcpy( string, "Hello world from " ); strcat( string, "strcpy " ); strcat( string, "and " ); strcat( string, "strcat!" ); printf( "string = %s\n", string); string = Hello world from strcpy and strcat! 10

문자열비교 int strcmp( const char *s1, const char *s2 ); 반환값 s1과 s2의관계 <0 s1이 s2보다앞에있다. 0 s1이 s2와같다. >0 s1이 s2보다뒤에있다. // strcmp() 함수 #include <string.h> char s1[80]; char s2[80]; int result; 예제 // 첫번째단어를저장할문자배열 // 두번째단어를저장할문자배열 문자열이같으면 strcmp() 는 0 을반환합니다. 주의하세요! printf(" 첫번째단어를입력하시오 :"); scanf("%s", s1); printf(" 두번째단어를입력하시오 :"); scanf("%s", s2); 예제 result = strcmp(s1, s2); if( result < 0 ) printf("%s 가 %s 보다앞에있읍니다.\n", s1, s2); else if( result == 0 ) printf("%s 가 %s 와같습니다.\n", s1, s2); else printf("%s 가 %s 보다뒤에있습니다.\n", s1, s2); 첫번째단어를입력하시오 :Hello 두번째단어를입력하시오 :World Hello 가 World 보다앞에있읍니다. 알파벳순으로즉사전에서앞에있다는의미 #include <string.h> char s[] = "language"; char c = 'g'; char *p; int loc; 문자검색 s 안에서문자 c 를찾는다. p = strchr(s, c); loc = (int)(p - s); if ( p!= NULL ) printf( " 첫번째 %c 가 %d 에서발견되었음 \n", c, loc ); else printf( "%c 가발견되지않았음 \n", c ); 첫번째 g 가 3 에서발견되었음 11

문자열검색 #include <string.h> char s[] = "A joy that's shared is a joy made double"; char sub[] = "joy"; char *p; s 안에서문자열 sub를찾는다. int loc; p = strstr(s, sub); loc = (int)(p - s); if ( p!= NULL ) printf( " 첫번째 %s가 %d에서발견되었음 \n", sub, loc ); else printf( "%s가발견되지않았음 \n", sub ); 중간점검 문자열 s1 를문자열 s2 로복사하는문장을써라. String" 을저장하려면최소한어떤크기이상의문자배열이필요한가? 문자열을서로비교하는함수는? strcpy() 와 strncpy() 의차이점은무엇인가? s1[] 에저장된문자열뒤에 s2[] 를붙이고싶으면어떤라이브러리함수를어떻게사용하여야하는가? strcmp("dog", "dog") 의반환값은얼마인가? 첫번째 joy 가 2 에서발견되었음 문자열의배열 (Q) 문자열이여러개있는경우에는어떤구조를사용하여저장하면제일좋을까? ( 예 ) init, open, close, (A) 여러개의문자배열을각각만들어도되지만문자열의배열을만드는것이여러모로간편하다. char s[3][6] = "init", "open", "close" ; i n i t \0 s[0][0] s[0][1] s[0][2] s[0][3] s[0][4] s[0][5] o p e n \0 열 s[1][0] s[1][1] s[1][2] s[1][3] s[1][4] s[1][5] 2 차원배열로입력 앞에 & 을붙이면안됨! int i; char fruits[3][20]; for(i = 0; i < 3; i++) printf(" 과일이름을입력하시오 : ", fruits[i]); scanf("%s", fruits[i]); for(i = 0; i < 3; i++) printf("%d번째과일 : %s\n", i, fruits[i]); 행 c l o s e \0 s[2][0] s[2][1] s[2][2] s[2][3] s[2][4] s[2][5] 과일이름을입력하시오 : 사과과일이름을입력하시오 : 배과일이름을입력하시오 : 포도 0번째과일 : 사과 1번째과일 : 배 2번째과일 : 포도 12

#include <ctype.h> int count_word(const char *s); 단어카운팅 printf("%d\n", count_word("the c book...")); int count_word ( const char * s ) int i, wc = 0, waiting = 1; 단어카운팅 for( i = 0; s[i]!= NULL; ++i) // s의각글자조사 if( isalpha(s[i]) ) // s의글자가알파벳이면 if( waiting ) // 워드를기다리고있으면 wc++; // 카운터를증가 waiting = 0; // 워드를처리하는중 else return wc; // 알파벳이아니면 waiting = 1; // 워드를기다린다. 3 중간점검 실습 : 메시지암호화 C", "JAVA", "C++", "BASIC" 등을저장하는문장을작성하라. 2 차원문자배열 s 에저장된 0 번째문자열을 printf() 를 메시지를암호화하는간단한기법중의하나는줄리어스시저가사용한암호화기법 평문에단순히더하기 ( 즉, 영어의알파벳을왼쪽으로이동하던지오른쪽으로이동하는것 ) 이용하여화면에출력하는문장을작성하라. 13

실행결과 도전문제 복호화하는함수 decrypt() 도작성하여테스트하라. 문자열을입력하시오 : meet at midnight 암호화된문자열 : phhw dw plgqjkw 메뉴를만들어서사용자로하여금암호화와복호화중에서선택하게하라. 1 암호화 2 복호화 Q & A 응용프로그래밍실습 12.1-2 12.1 12.2 14

응용프로그래밍실습 12.3-5 응용프로그래밍실습 12.6-7 12.3 12.6 12.4 12.7 12.5 15