<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

Similar documents
11장 포인터

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

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

11장 포인터

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

11장 포인터

<4D F736F F F696E74202D20C1A63132C0E520B9AEC0DABFCD20B9AEC0DABFAD>

Microsoft PowerPoint - chap-12.pptx

11장 포인터

11장 포인터

11장 포인터

ch13

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

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

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

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

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

歯9장.PDF

Microsoft PowerPoint - Lesson13.pptx

PowerPoint 프레젠테이션

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

chap7.key

Microsoft PowerPoint - 10장 문자열 pptx

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

중간고사

02장.배열과 클래스

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

V28.


<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - [2009] 02.pptx

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

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

untitled

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

Microsoft PowerPoint - Chapter_08.pptx

ch15

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

歯7장.PDF

chap7.PDF

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

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 \

11장 포인터

Hanyang Volunteer Corps volunteer image

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

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

Microsoft PowerPoint - 7_배열_문자열

제1장 Unix란 무엇인가?

untitled

쉽게 풀어쓴 C 프로그래밍

11장 포인터

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

컴파일러

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

Microsoft PowerPoint - 제9강 문자열

BMP 파일 처리

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

슬라이드 1

fprintf(fp, "clf; clear; clc; \n"); fprintf(fp, "x = linspace(0, %d, %d)\n ", L, N); fprintf(fp, "U = [ "); for (i = 0; i <= (N - 1) ; i++) for (j = 0

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제11강 파일 처리

: 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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

본 강의에 들어가기 전

비트와바이트 비트와바이트 비트 (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 - chap06-1Array.ppt

설계란 무엇인가?

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap12-고급기능.pptx

08년요람001~016

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

untitled

untitled

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint 프레젠테이션

11장 포인터

슬라이드 1

Microsoft PowerPoint - 제11장 포인터

PowerPoint 프레젠테이션

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

PA for SWE2007

기초컴퓨터프로그래밍

Computer Programming (2008 Fall)

설계란 무엇인가?

µðÇÃÇ¥Áö±¤°í´Ü¸é

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

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>



PowerPoint Presentation

YRRZBRRLMCEQ.hwp

06³â_±â»ÝÀÇ»ù_10¿ùÈ£_À¥Áø

Transcription:

문자열처리라이브러리 함수 설명 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 5-32

문자열의길이 strlen( Hello ) 는 5 를반환 문자열길이 (strlen) 5-33

문자열복사 char dst[6]; char src[6] = Hello"; strcpy(dst, src); 문자열복사 (strcpy) src H e l l o \0 dst H e l l o \0 5-34

문자열연결 문자열연결 char dst[12] = "Hello"; char src[6] = "World"; strcat(dst, src); H e l l o \0 W o r l d \0 dst src 5-35

예제 // 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! 5-36

문자열비교 int strcmp( const char *s1, const char *s2 ); 반환값 s1과 s2의관계 <0 s1이 s2보다작다 0 s1이 s2와같다. >0 s1이 s2보다크다. s1 s t r c m p \0 s2 = = = = > s t r c p y \0 m 이 p 보다아스키코드값이작으므로음수가반환된다. 5-37

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

문자검색 #include <string.h> #include <stdio.h> int main( void ) 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 ); return 0; 첫번째 g가 3에서발견되었음 5-39

문자열검색 #include <string.h> #include <stdio.h> int main( void ) 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 ); 첫번째 joy가 2에서발견되었음 5-40

strtok() 형식 char *strtok( char *s, const char *delimit ); 설명 strtok 함수는문자열 s 을토큰으로분리한다. 만약분리자가 일경우, 토큰을얻으려면다음과같이호출한다. t1 = strtok(s, " "); // 첫번째토큰 t2 = strtok(null, " "); // 두번째토큰 t3 = strtok(null, " "); // 세번째토큰 t4 = strtok(null, " "); // 네번째토큰 5-41

문자열토큰분리 // strtok 함수의사용예 #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 ); // 분리자 토큰 :Man 토큰 :is 토큰 : immortal 토큰 :because 토큰 :he 토큰 :has 토큰 :a 토큰 :soul 5-42

문자열수치변환 문자열과수치 3 6. 5 \0 src[0] src[1] src[2] src[3] src[4] src[5] 36.5 v 문자열 수치 scanf() 함수는문자열을수치로변환한다. 3 6. 5 \0 36.5 scanf()... scanf( %f, x);... scanf() 가키보드에서입력된문자열을숫자로변환합니다.. 5-43

예제 #include <stdio.h> int main( void ) char s1[] = "100 200 300"; char s2[30]; int value; sscanf(s1, "%d", &value); printf("%d\n", value); sprintf(s2, "%d", value); printf("%s\n", s2); return 0; 100 100 5-44

예제 #include <stdio.h> #include <string.h> int main(void) char filename[100]; char s[100]; int i; for(i=0; i < 6; i++) strcpy(filename, "image"); sprintf(s, "%d", i); strcat(filename, s); strcat(filename, ".jpg"); printf("%s \n", filename); return 0; image0.jpg image1.jpg image2.jpg image3.jpg image4.jpg image5.jpg 5-45

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

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

문자열의배열 (Q) 문자열이여러개있는경우에는어떤구조를사용하여저장하면제일좋을까? (A) 여러개의문자배열을각각만들어도되지만문자열의배열을만드는것이여러모로간편하다. 문자열이문자배열에저장되므로문자열의배열은배열의배열, 즉 2차원문자배열이된다. char s[3][6] = "init", "open", "close" ; 열 S e o u l \0 s[0][0] s[0][1] s[0][2] s[0][3] s[0][4] s[0][5] S e o u l \0 s[1][0] s[1][1] s[1][2] s[1][3] s[1][4] s[1][5] 행 S e o u l \0 s[2][0] s[2][1] s[2][2] s[2][3] s[2][4] s[2][5] 5-48

2 차원배열로입력 #include <stdio.h> int main( void ) 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]); return 0; 과일이름을입력하시오 : 사과과일이름을입력하시오 : 배과일이름을입력하시오 : 포도 0번째과일 : 사과 1번째과일 : 배 2번째과일 : 포도 5-49

File open 의의미 File open (1) 파일에서데이터를읽거나쓸수있도록모든준비를마치는것을의미 파일을연다음에는데이터를읽기, 쓰기가능 File open File read & write File close 순으로진행 FILE 구조체를통하여파일에접근 FILE 구조체를가리키는포인터를파일포인터 (file pointer) 라고한다 각각의파일마다하나의파일포인터가필요 FILE *fopen (const char *name, const char *mode); name : 파일의이름을나타내는문자열 mode : 파일을여는방식 5-50

File open (2) File mode 모드 r 읽기모드로파일을연다. w a 설명 쓰기모드로파일을생성한다. 만약파일이존재하지않으면파일이생성된다. 파일이이미존재하면기존의내용이지워진다. 추가모드로파일을연다. 만약똑같은이름의기존의파일이있으면데이터가파일의끝에추가된다. 파일이없으면새로운파일이만들어진다. r+ 읽기와쓰기모드로파일을연다. 파일이반드시존재해야한다. w+ a+ 읽기와쓰기모드로파일을생성한다. 만약파일이존재하지않으면파일이생성된다. 파일이존재하면새데이터가기존파일의데이터에덮어쓰인다. 읽기와추가모드로파일을연다. 만약똑같은이름의기존의파일이있으면데이터가파일의끝에추가된다. 읽기는어떤위치에서나가능하다. 파일이없으면새로운파일을만든다. b 이진파일모드로파일을연다. 5-51

fclose() File close 열린파일을닫는함수 stdio.h에정의 성공적으로파일을닫는경우에는 0이반환 만약실패한경우에는 -1이반환 int fclose (FILE *stream) 5-52

Sample.txt 생성 Project -> sample.txt 생성 File open/close 예제 File open/close #include "stdio.h" int main() FILE *fp = NULL; fp = fopen("sample.txt", "w"); //FILE 포인터fp를생성하고NULL로초기화 // 파일을쓰기모드로열고, 그주소를 fp에저장 if (fp == NULL) printf(" 파일열기실패 \n"); else printf(" 파일열기성공 \n"); fclose(fp); // 파일닫기 return 0; 5-53

형식화된입출력 텍스트파일읽기와쓰기 (2) 정수나실수데이터를파일에문자열로바꾸어서저장 fprintf() 사용방법은 printf() 와비슷하나, 화면이아닌파일에출력 int fprintf( FILE *fp, const char *format, ); fprintf() 사용예제 #include <stdio.h> int main() int i = 23; float f = 1.2345; FILE *fp = NULL; fp = fopen("sample.txt", "w"); //FILE 포인터fp를생성하고NULL로초기화 // 파일을쓰기모드로열고, 그주소를 fp에저장 if(fp!= NULL) fprintf(fp, "%10d %16.4f", i, f); fclose(fp); // 파일닫기 return 0; 5-54

텍스트파일읽기와쓰기 (3) fscanf() scanf() 와사용법은비슷하지만입력대상이키보드가아닌파일 int fscanf( FILE *fp, const char *format, ); fscanf() 사용예제 #include <stdio.h> int main() int i; float f; FILE *fp = NULL; fp = fopen("sample.txt", "r"); //FILE 포인터fp를생성하고 NULL로초기화 // 파일을읽기모드로열고, 그주소를 fp에저장 if(fp!= NULL) fscanf(fp, "%d %f", &i, &f); printf(" %d\n %f\n", i, f); // 화면에출력 fclose(fp); // 파일닫기 return 0; 5-55

/** FileInputOutput.cpp */ 파일입력, 출력예제프로그램 /* * Programmed by Prof. YT Kim ( 2012. 11. 20.) */ #include <stdio.h> #include <string.h> #define MAX_WORD_LEN 50 #define NUM_WORDS 100 int main() FILE *pfin = NULL; FILE *pfout = NULL; char str[80]; char wordlist[num_words][max_word_len]; int word_count; pfin = fopen("input.txt", "r"); if (pfin == NULL) printf("error in input data file open!! n"); return 0; 5-56

/** FileInputOutput.cpp (2) */ pfout = fopen("output.txt", "w"); if (pfout == NULL) printf("error in output data file creation!! n"); return 0; word_count = 0; while (fscanf(pfin, "%s", str)!= EOF) printf("%2d-th input word: %s n", word_count, str); strcpy(wordlist[word_count], str); word_count++;; printf("number of words: %d n", word_count); for (int i=0; i<word_count; i++) fprintf(pfout, "wordlist[%2d]: %s (length: %d) n", i, wordlist[i], strlen(wordlist[i])); fprintf(pfout, " n"); fclose(pfin); fclose(pfout); 5-57

input.txt one two three four five six seven eight nine ten January February March April May June July August September October Sunday Monday Tuesday Wednesday Thursday Friday Saturday week day month China India UnitedStates Indonesia Brazil Pakistan Nigeria Russia Bangladesh Japan Mexico Philippines Vietnam Ethiopia Germany Egypt Iran Turkey Congo Thailand France UnitedKingdom Italy 5-58

output.txt wordlist[ 0]: one (length: 3) wordlist[ 1]: two (length: 3) wordlist[ 2]: three (length: 5) wordlist[ 3]: four (length: 4) wordlist[ 4]: five (length: 4) wordlist[ 5]: six (length: 3) wordlist[ 6]: seven (length: 5) wordlist[ 7]: eight (length: 5) wordlist[ 8]: nine (length: 4) wordlist[ 9]: ten (length: 3) wordlist[10]: January (length: 7) wordlist[11]: February (length: 8) wordlist[12]: March (length: 5) wordlist[13]: April (length: 5) wordlist[14]: May (length: 3) wordlist[15]: June (length: 4) wordlist[16]: July (length: 4) wordlist[17]: August (length: 6) wordlist[18]: September (length: 9) wordlist[19]: October (length: 7) wordlist[20]: Sunday (length: 6) wordlist[21]: Monday (length: 6) wordlist[22]: Tuesday (length: 7) wordlist[23]: Wednesday (length: 9) wordlist[24]: Thursday (length: 8) wordlist[25]: Friday (length: 6) wordlist[26]: Saturday (length: 8) wordlist[27]: week (length: 4) wordlist[28]: day (length: 3) wordlist[29]: month (length: 5) wordlist[30]: China (length: 5) wordlist[31]: India (length: 5) wordlist[32]: UnitedStates (length: 12) wordlist[33]: Indonesia (length: 9) wordlist[34]: Brazil (length: 6) wordlist[35]: Pakistan (length: 8) wordlist[36]: Nigeria (length: 7) wordlist[37]: Russia (length: 6) wordlist[38]: Bangladesh (length: 10) wordlist[39]: Japan (length: 5) wordlist[40]: Mexico (length: 6) wordlist[41]: Philippines (length: 11) wordlist[42]: Vietnam (length: 7) wordlist[43]: Ethiopia (length: 8) wordlist[44]: Germany (length: 7) wordlist[45]: Egypt (length: 5) wordlist[46]: Iran (length: 4) wordlist[47]: Turkey (length: 6) wordlist[48]: Congo (length: 5) wordlist[49]: Thailand (length: 8) wordlist[50]: France (length: 6) wordlist[51]: UnitedKingdom (length: 13) wordlist[52]: Italy (length: 5) 5-59

Homework 5 5.1 영문자를처리하는프로그램 1) 10 개의 ASCII 단어를입력파일 input.dat 로부터입력하여 character array에저장하라. 각단어는최대 15 자이내이며, 입력데이터파일의내용은다음과같다. one two three four five six seven eight nine ten 2) strlen(char *) 함수를이용하여각단어의길이를찾고, 이를 integer array에저장하라. 3) 입력단어들을해당단어길이와함께, 한줄에한단어씩, 출력화일 output.dat 에출력하라. 4) 입력단어들을 strcmp(char *, char *) 함수와 quick sorting을사용하여오름차순 (ascending order) 으로정렬 (sorting) 하고, 그결과를출력파일 output.dat 에출력하라. 5-60

5.2 ASCII 문자를입력받아 16 진수로변환하기 1) 0 ~ 9, A ~ F 사이에있는 ASCII 코드문자열을매개변수로전달받은후, 이를 16진수로변환하여정수 (integer) 형으로반환하는함수를작성하라. int atox(char *str); 2) printf( %d, d) 함수를사용하여, 저장된정수값을 10진수로출력하라. 3) 하나의정수값과문자 pointer를매개변수로전달받은후, 전달된정수값을 16진수의 ASCII 코드로변환하여, 문자 pointer가지정하는 string buffer 에저장하는함수를작성하라. void xtoa(int d, char *str); 4) 표준입력장치로부터 0 ~ 9, A ~ F 사이에있는 ASCII 코드문자로구성된 16진수데이터를입력받은후, 위의 atox() 함수를사용하여정수값으로변환하고, 이변환된정수값을위에서구현한 xtoa() 함수를사용하여 16진수 ASCII 문자열로변환한후, 이를출력하는프로그램을작성하라. 5-61