11장 포인터

Similar documents
11장 포인터

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

11장 포인터

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

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

Microsoft PowerPoint - chap-12.pptx

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

11장 포인터

11장 포인터

<4D F736F F F696E74202D20C1A63132C0E520B9AEC0DABFCD20B9AEC0DABFAD>

ch13

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

11장 포인터

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

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

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

Microsoft PowerPoint - 10장 문자열 pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

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

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

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

Microsoft PowerPoint - chap06-1Array.ppt

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

Microsoft PowerPoint - 제9강 문자열

11장 포인터

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

YRRZBRRLMCEQ.hwp

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

歯9장.PDF

중간고사

PowerPoint Presentation

C 프로그램의 기본

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

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

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

PowerPoint 프레젠테이션


슬라이드 1

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

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

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

설계란 무엇인가?

Microsoft PowerPoint - chap08.ppt

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

02장.배열과 클래스

Microsoft PowerPoint - chap06-2pointer.ppt

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

OCW_C언어 기초

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - [2009] 02.pptx

: 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

untitled

Microsoft PowerPoint - Chapter_08.pptx

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

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

PowerPoint Presentation

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

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - 제11장 포인터

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

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

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 7_배열_문자열

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - Lesson2.pptx

chap7.key

Chapter_06

untitled

untitled

PA for SWE2007

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

ch15

untitled

Microsoft PowerPoint - chap03-변수와데이터형.pptx

歯7장.PDF

chap7.PDF

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

03 상수, 변수, 자료형

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

C++ Programming


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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

C 프로그래밊 개요

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

PowerPoint Presentation

OCW_C언어 기초

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - chap-11.pptx

Transcription:

누구나즐기는 C 언어콘서트 제 10 장문자와문자열

이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 문자와문자열처리방법에대하여살펴볼것이다.

문자표현방법 컴퓨터에서는각각의문자에숫자코드를붙여서표시한다. 아스키코드 (ASCII code): 표준적인 8비트문자코드 0에서 127까지의숫자를이용하여문자표현 유니코드 (unicode): 표준적인 16비트문자코드 전세계의모든문자를일관되게표현하고다룰수있도록설계 65 69 71 74 78 C 에서문자는숫자로표현됩니다.

문자변수와문자상수 // 문자상수 #include <stdio.h> 문자변수 문자상수 int main(void) { char code1 = 'A'; char code2 = 65; } printf("code1=%c, code2=%c\n", code1,code2); return 0; code1=a, code2=a

아스키코드출력 // 아스키코드출력 #include <stdio.h> int main(void) { unsigned char code; } for(code = 32; code < 128; code++) { printf(" 아스키코드 %d은 %c입니다.\n", code, code); } return 0; 아스키코드 32 은입니다. 아스키코드 33 은! 입니다.... 아스키코드 97 은 a 입니다. 아스키코드 98 은 b 입니다. 아스키코드 127 은 입니다.

중간점검 1. 컴퓨터에서는문자를어떻게나타내는가? 2. C 에서문자를가장잘표현할수있는자료형은무엇인가? 3. 컴파일러가 'A' 를만나면어떻게처리하는가?

문자열표현방법 문자열 (string): 문자들이여러개모인것 "A" "Hello World!

문자열상수와변수 문자열상수 : 변경되지않는문자열을저장 ( 예 ) "Hello World 문자열변수 : 변경되는문자열을저장 char 형배열을사용한다. ( 예 ) char str[100];

NULL 문자 NULL 문자 : 문자열의끝을나타낸다.

왜 NULL 문자가필요한가? 문자열은어디서종료되는지알수가없으므로표시를해주어야한다.

문자배열의초기화 문자배열원소들을중괄호안에넣어주는방법 char str[6] = { 'H', 'e', 'l', 'l', 'o', '\0' }; 문자열상수를사용하여초기화하는방법 char str[6] = "Hello"; 만약배열을크기를지정하지않으면컴파일러가자동으로배열의크기를초기화값에맞추어설정 char str[] = "C Bible"; // 배열의크기는 7 이된다.

예제 #1 #include <stdio.h> int main(void) { char str1[6] = "Seoul ; char str2[3] = { 'i', 's' }; char str3[] = "the capital city of Korea. ; } printf("%s %s %s\n", str1, str2, str3); Seoul is the capital city of Korea.

예제 #2 #include <stdio.h> int main(void) { char str[] = "komputer"; printf("%s ", str); str[0] = 'c'; printf("%s ", str); } return 0 k o m p u t e r c o m p u t e r

// 문자열의길이를구하는프로그램 #include <stdio.h> 예제 #3 int main(void) { char str[30] = "A barking dog never bites"; int i = 0; while(str[i]!= 0) i++; printf(" 문자열 \"%s\" 의길이는 %d 입니다.\n", str, i); } return 0; 문자열 A barking dog never bites 의길이는 25 입니다.

중간점검 1. C 에서문자열은어떻게정의되는가? 2. 문자열에서 NULL 문자의역할은무엇인가? 3. NULL 문자의아스키코드값은얼마인가? 4. NULL 문자로끝나지않는문자열을출력하면어떻게되는가? 5. B, 'B', "B" 의차이점을설명하라. 6. 변경가능한문자열은어디에저장되는가? 7. 문자열의크기보다문자배열의크기를하나더크게하는이유는무엇인가? 8. 문자배열을문자열로초기화하는방법을아는대로설명하라.

문자입출력라이브러리 입출력함수 설명 int getchar(void) 하나의문자를읽어서반환한다. void putchar(int c) 변수 c에저장된문자를출력한다. int getch(void) 하나의문자를읽어서반환한다 ( 버퍼를사용하지않음 ). void putch(int c) 변수 c에저장된문자를출력한다 ( 버퍼를사용하지않음 ). scanf("%c", &c) 하나의문자를읽어서변수 c에저장한다. printf("%c", c); 변수 c에저장된문자를출력한다.

// getchar() 의사용 #include <stdio.h> getchar(), putchar() int main(void) { int ch; } // 정수형에주의 while(1) { ch = getchar(); // 문자를입력받는다. if( ch == 'q' ) break; putchar(ch); } return 0; 반드시엔터키가눌려져야만이입력을받는다. A A B B q

문자입출력버퍼 일반적으로버퍼를사용한다.

getch(), putch() // getch() 의사용 #include <conio.h> int main(void) { int ch; // 정수형에주의 버퍼를사용하지않는다 } while(1) { ch = getch(); // 문자를입력받는다. if( ch == 'q' ) break; putch(ch); } return 0; ABCDEFGH

getch(), getche(), getchar() getchar() 헤더파일버퍼사용여부에코여부응답성문자수정여부 <stdio.h> 사용함 ( 엔터키를눌러입력됨 ) getch() <conio.h> 사용하지않음 에코줄단위가능 에코하지않음 문자단위 불가능 getche() <conio.h> 사용하지않음에코문자단위불가능 용도에맞는것을골라사용하세요! 버퍼가없이바로받으려면 getch() 를사용합니다.

중간점검 1. getchar() 와 getch() 가다른점은무엇인가? 2. 하나의문자를입력받는방법에는몇가지나있는가?

문자열입출력라이브러리함수 입출력함수 설명 int scanf("%s", s) 문자열을읽어서문자배열 s[] 에저장 int printf("%s", s) 배열 s[] 에저장되어있는문자열을출력한다. char *gets(char *s) 한줄의문자열을읽어서문자배열 s[] 에저장한다. int puts(const char *s) 배열 s[] 에저장되어있는한줄의문자열을출력한다. Hello World!... 프로그램

scanf(), printf() 문자열입출력 scanf() 의사용법 char str[10]; scanf("%s", str); scanf() 는한번에두개이상의문자열도받아들일수있다. char s1[10]; char s2[10]; char s3[10]; scanf("%s%s%s", s1,s2,s3); // 사용자가 one two three 와같이입력하면 s1 에는 one 이, s2 에는 two 가, s3 에는 three 가할당된다.

예제

gets() 와 puts() 문자열입출력 gets() 표준입력으로부터엔터키가나올때까지한줄의라인을입력 문자열에줄바꿈문자 ('\n') 는포함되지않으며대신에자동으로 NULL 문자 ('\0') 를추가한다. 입력받은문자열은 buffer가가리키는주소에저장된다. puts() str이가리키는문자열을받아서화면에출력 NULL 문자 ('\0') 는줄바꿈문자 ('\n') 로변경

예제 #include <stdio.h> int main(void) { char name[100]; char address[100]; printf(" 이름을입력하시오 : "); gets(name); printf(" 현재거주하는주소를입력하시오 : "); gets(address); } puts(name); puts(address); return 0; 이름을입력하시오 : 홍길동현재거주하는주소를입력하시오 : 서울시종로구 100 번지홍길동서울시종로구 100 번지

중간점검 1. 한줄의텍스트를입력받는문장을작성하라. 2. 사용자로부터하나의단어를입력받는문장을작성하라.

문자처리라이브러리함수 문자를검사하거나문자를변환한다. 함수 설명 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를아스키코드로바꾼다.

예제 #include <stdio.h> #include <ctype.h> int main( void ) { int c; 소문자인지검사대문자로변환 } while((c = getchar())!= EOF) { if( islower(c) ) c = toupper(c); putchar(c); } return 0; abcdef ABCDEF ^Z

예제 #include <stdio.h> #include <conio.h> #include <ctype.h> int main( void ) { 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"); } return 0; ------------------------ isdigit(') = 0 isalpha(') = 0 islower(') = 0 ispunct(') = 16 isxdigit(') = 0 isprint(') = 16 ------------------------...

중간점검 1. 문자처리라이브러리함수를사용하려면포함시켜야하는헤더파일은무엇인가? 2. getchar() 와 getch() 가다른점은무엇인가? 3. ispunct('.') 의반환값은무엇인가? 4. 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를찾는다. H e l l o W o r l d

문자열길이

문자열복사

문자열연결

예제 // strcpy 와 strcat #include <string.h> #include <stdio.h> int main( void ) { char string[80]; } strcpy( string, "Hello world from " ); strcat( string, "strcpy " ); strcat( string, "and " ); strcat( string, "strcat!" ); printf( "string = %s\n", string ); return 0; string = Hello world from strcpy and strcat!

문자열비교 int strcmp( const char *s1, const char *s2 ); 반환값 s1과 s2의관계 <0 s1이 s2보다앞에있다. 0 s1이 s2와같다. >0 s1이 s2보다뒤에있다.

// strcmp() 함수 #include <string.h> #include <stdio.h> int main( void ) { char s1[80]; char s2[80]; int result; 예제 // 첫번째단어를저장할문자배열 // 두번째단어를저장할문자배열 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); } return 0; 첫번째단어를입력하시오 :Hello 두번째단어를입력하시오 :World Hello가 World보다앞에있읍니다.

문자검색, 문자열검색 문자열에서문자검색 char s[] = "language"; // 문자열 char c = 'g'; // 찾고자하는문자 char *p; // 문자포인터 p = strchr(s, c); // str 에서 c 를찾는다. 문자열에서문자열검색 char s[] = "A joy that's shared is a joy made double"; // 입력문자열 char sub[] = "joy"; // 찾으려고하는문자열 char *p; // 문자검색위치저장포인터 p = strstr(s, sub); // s 에서 sub 를찾는다.

문자열토큰분리 char *strtok( char *s, const char *delimit ); 입력문자열분리자 ( 예를들어서스페이스나탭 ) char s[] = "A joy that's shared is a joy made double";// 입력문자열 token = strtok(s, " "); // " " 로분리된토큰 A 를얻는다. token = strtok(null, " "); // " " 로분리된토큰 joy 를얻는다 같은문자열에서다음토큰을얻을때는 NULL 을기입한다.

문자열토큰분리 #include <string.h> #include <stdio.h> char s[] = "Man is immortal, because he has a soul"; char seps[] = ",\t\n"; char *token; int main( void ) { // 문자열을전달하고다음토큰을얻는다. token = strtok( s, seps ); while( token!= NULL ) { // 문자열 s 에토큰이있는동안반복한다. printf( " 토큰 : %s\n", token ); // 다음토큰을얻는다. token = strtok( NULL, seps ); // } return 0; } 토큰 : Man 토큰 : is 토큰 : immortal 토큰 : because 토큰 : he 토큰 : has 토큰 : a 토큰 : soul

중간점검 1. 문자열 s1 를문자열 s2 로복사하는문장을써라. 2. String" 을저장하려면최소한어떤크기이상의문자배열이필요한가? 3. 문자열을서로비교하는함수는? 4. s1[] 에저장된문자열뒤에 s2[] 를붙이고싶으면어떤라이브러리함수를어떻게사용하여야하는가? 5. strcmp("dog", "dog") 의반환값은얼마인가?

문자열과수치 문자열과수치 char 형배열 double 형변수 문자열 수치 문자열을수치로변경하고싶은경우에는어떻게할까?

문자열 <-> 수치 함수 설명 sscanf(s,...) 문자열 s 로부터지정된형식으로수치를읽어서변수에저장한다. sprintf(s,...) 변수의값을형식지정자에따라문자열형태로문자배열 s 에저장한 다. sscanf() sprintf()

문자열 <-> 수치 #include <stdio.h> 연산결과는 112.930000 입니다. int main( void ) { char s1[] = "100"; char s2[] = "12.93"; char buffer[100]; int i; double d; double result; sscanf(s1, "%d", &i); sscanf(s2, "%lf", &d); result = i + d; } sprintf(buffer, "%f", result); printf(" 연산결과는 %s 입니다.\n", buffer); return 0;

문자열을수치로변환하는전용함수 전용함수는 scanf() 보다크기가작다. stdlib.h 에원형정의 - 반드시포함 함수 설명 int atoi( const char *str ); str 을 int 형으로변환한다. long atoi( const char *str ); str 을 long 형으로변환한다. double atof( const char *str ); str 을 double 형으로변환한다. atof()

문자열 <-> 수치 #include <stdio.h> #include <stdlib.h> 연산결과는 112.930000 입니다. int main( void ) { char s1[] = "100"; char s2[] = "12.93"; char buffer[100]; int i; double d; double result; i = atoi(s1); d = atof(s2); } result = i + d; sprintf(buffer, "%f", result); printf(" 연산결과는 %s 입니다.\n", buffer); return 0;

중간점검 1. 실수값 3.141592 와문자열 3.141592 가차지하는메모리공간을비교하라. 2. 문자열 3.141592 를실수값을변환하고자할때사용할수있는함수는어떤것들이있는가? 3. printf() 와 sprintf() 가다른점은무엇인가?

문자열의배열 (Q) 문자열이여러개있는경우에는어떤구조를사용하여저장하면제일좋을까? (A) 여러개의문자배열을각각만들어도되지만문자열의배열을만드는것이여러모로간편하다. char s[3][6] = { "init", "open", "close" };

문자열의배열 문자열이문자배열에저장되므로문자열의배열은배열의배열, 즉 2 차원문자배열이된다. char s[3][6] = { "init", "open", "close" };

메뉴디스플레이 #include <stdio.h> int main( void ) { int i; char menu[5][10] = { "init", "open", "close", "read", "write" }; for(i = 0; i < 5; i++) printf("%d 번째메뉴 : %s \n", i, menu[i]); } return 0; 0 번째메뉴 : init 1 번째메뉴 : open 2 번째메뉴 : close 3 번째메뉴 : read 4 번째메뉴 : write

#include <stdio.h> #include <string.h> #define WORDS 5 한영사전구현 int main( void ) { int i, index; char dic[words][2][30] = { {"book", " 책 "}, {"boy", " 소년 "}, {"computer", " 컴퓨터 "}, {"lanuguage", " 언어 "}, {"rain", " 비 "}, }; char word[30];

한영사전구현 printf(" 단어를입력하시오 :"); scanf("%s", word); index = 0; for(i = 0; i < WORDS; i++) { if( strcmp(dic[index][0], word) == 0 ) { printf("%s: %s\n", word, dic[index][1]); return 0; } index++; } printf(" 사전에서발견되지않았습니다.\n"); } return 0; 단어를입력하시오 :rain rain: 비

중간점검 1. C", "JAVA", "C++", "BASIC" 등을저장할수있는방법을가능한한많이제시하라. 2. 2 차원문자배열 s[][] 에서첫번째문자열을 printf() 를이용하여화면에출력하는문장을작성하라.?

Q & A