15 문자열

22
1 15 문문문 2007 1 문문

Upload: gwidon

Post on 04-Jan-2016

51 views

Category:

Documents


0 download

DESCRIPTION

2007 1 학기. 15 문자열. 문자의 집합체. 문자열의 정의 일련의 문자 C 언어에서 문자열 앞 뒤에 인용부호 “”를 이용 문자와 문자열과의 차이 문자열의 저장 배열을 이용하여 문자열을 저장 문자열 상수 “ C language” 를 저장하는 문자열 배열 항상 문자열 마지막에는 NULL 문자를 넣어야 함 예제 15-1. 문자 포인터 배열의 이용. 처리하려는 문자열의 수 만큼의 문자 포인터 이용 래기드 (ragged) 배열 각 문자열의 출력 : pary[i] , *(pary +i). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 15  문자열

1

15 문자열

2007 1 학기

Page 2: 15  문자열

Perfect C2

문자의 집합체 문자열의 정의

일련의 문자 C 언어에서 문자열 앞 뒤에 인용부호 “”를 이용 문자와 문자열과의 차이

문자열의 저장 배열을 이용하여 문자열을 저장 문자열 상수 “ C language” 를 저장하는 문자열 배열 항상 문자열 마지막에는 NULL 문자를 넣어야 함 예제 15-1

Page 3: 15  문자열

Perfect C3

문자 포인터 배열의 이용 처리하려는 문자열의 수 만큼의 문자 포인터 이용

래기드 (ragged) 배열

각 문자열의 출력 : pary[i] , *(pary +i)

char *pary[ ] = {"AT&t", "AT&t", "Sun", "MS"};

for (i = 0; i < 4; )printf("%-8s", pary[i++]);//printf("%-8s", *(pary + i++));

printf("\n");

Page 4: 15  문자열

Perfect C4

문자 2 차원 배열을 이용

char strary[][5] = {"c", "c++", "java", "c#"};

for (i = 0; i < 4; )printf("%-8s", strary[i++]);//printf("%-8s", *(strary + i++));

printf("\n");

문자 2 차원 배열 2차원 배열의 열의 크기는 문자열 중에서 가장 긴 문자열의 길이보다 1 크게 지정하고 , 2차원

배열의 행의 크기는 문자열의 개수로 지정

문자 이차원 배열 strary를 이용하여 각 문자열을 출력하려면 strary[i]로 변환 명세 %s를 이용

Page 5: 15  문자열

Perfect C5

예제 소스 strarray.c

문자열 배열을 문자 포인터 배열과 문자 2차원 배열로 저장하고 , 필요한 문자열과 문자를 참조하는 프로그램

Page 6: 15  문자열

Perfect C6

gets puts 함수함수 gets() 를 이용한 문자열 입력

문자열을 입력 받을 적절한 문자 배열 이용 반환 주소 값을 이용하면 문자별로 참조가 가능

함수 puts() 를 이용한 문자열 출력 출력할 문자열의 첫 주소 값을 인자로 출력

여러 줄의 입력 후 출력

char line[81];char *ptr;ptr = gets(line);while (*ptr)

putchar(* ptr++);

char *str = " 객체지향 언어를 하나 써 보세요 ?";puts(str);

while ( gets(line) ) puts(line);

Page 7: 15  문자열

Perfect C7

파일 입출력 함수의 이용 함수 fgets()

두 번째 인자는 입력할 문자의 수이고 , 세 번째 인자는 입력될 문자열의 파일

문자열을 개행문자까지 읽어 개행문자도 함께 입력 문자열에 저장

함수 fputs() 문자열을 그대로 출력

표준 입출력 상수 stdin, stdout 여러 줄의 입력 후 출력

char * fgets(char *, int, FILE *);int fputs(const char *, FILE *);

while (fgets(line, LINENUM, stdin)) {fputs(line, stdout);

}

Page 8: 15  문자열

Perfect C8

버퍼링에 의한 문자 입출력 함수 getchar(), putchar()

라인 버퍼링 (line buffering) • 입력된 자료가 버퍼에 저장되고 Enter 키를 만나야 getchar() 함수가

작동

char ch; printf(" 문자를 계속 입력하고 Enter 를 누르면 >>\n"); while ((ch=getchar()) != 'q')

putchar(ch);

Page 9: 15  문자열

Perfect C9

버퍼링을 사용하지 않는 문자 입력 함수 getche()

버퍼를 이용하지 않고 문자 하나 하나를 바로 처리하는 함수 헤더파일 conio.h 파일을 첨가 버퍼를 사용하지 않으므로 문자 하나를 입력하면 바로 함수 getche() 를

실행하고 입력 문자가 ‘ q’ 가 아니면 함수 putchar() 에 의하여 문자가 바로 출력

char ch; printf("\n 문자를 누를 때마다 두 번 출력 >>\n"); while ((ch=getche()) != 'q')

putchar(ch);

Page 10: 15  문자열

Perfect C10

버퍼링과 에코가 없는 문자 입력 함수 getch()

함수 getche() 와 마찬가지로 버퍼를 사용하지 않는 입력함수 헤더파일 conio.h 파일을 첨가 입력한 문자를 화면에 보이지 않는 특성 , 입력한 문자를 출력함수로

출력하지 않으면 그 문자가 화면에 나타나질 않음

char ch; printf("\n 문자를 누를 때마다 한 번 출력 >>\n"); while ((ch=getch()) != 'q')

putchar(ch);

Page 11: 15  문자열

Perfect C11

문자처리 함수 관련 함수

문자처리 함수는 헤더파일 ctype.h 를 포함시켜 사용 검사 함수는 isxxx(char) 로 , 변환 함수는 toxxx(char) 로 명명 검사 함수는 0(false) 과 0 이 아닌 정수 값 (true) 을 반환하며 , 변환

함수는 변환된 문자를 반환 함수 toxxx()

함수 toupper(c) 는 c 가 영문 소문자일 때 영문 대문자로 변환하고 , c 가 소문자가 아니라면 원래 c 가 반환

마찬가지로 tolower(c) 는 각각 c 가 영문 대문자일 때 영문 소문자로 변환하고 , c 가 대문자가 아니라면 원래 c 가 반환

함수 _toxxx() 함수 _tolower(c) 와 _toupper(c) 는 c 값에 관계없이 소문자와 대문자로

변환 영문자가 아닌 문자를 적용하면 원하지 않는 결과가 나오므로 주의

#define _tolower(_c) ( (_c)-'A'+'a' )#define _toupper(_c) ( (_c)-'a'+'A' )

Page 12: 15  문자열

Perfect C12

문자열 함수 문자열 관련 함수

문자열 처리 라이브러리 함수는 헤더파일 string.h 에 함수 원형이 정의 문자열 처리 라이브러리 함수는 대부분 이름 str----() 로 명명

함수 strcmp() 두 문자열을 비교하는 함수

함수 strlen() 문자열에서 처음의 NULL 문자를 제외한 문자열의 길이를 반환

함수 strcpy() 앞 문자열에 처음에 뒤 문자열을 복사하여 그 복사된 문자열을 반환

함수 strcat() 앞 문자열에 뒤 문자열을 연결 (concatenate) 저장하여 , 이 연결된

문자열을 반환 함수 strtok()

앞 문자열에서 뒤 문자열에 포함되어 있는 구분자를 기준으로 토큰을 추출

Page 13: 15  문자열

Perfect C13

함수 strcmp() 함수원형

두 문자열을 비교하는 함수

비교방법 전달인자인 두 문자열을 사전 (lexicographically) 상의 순서로 비교 앞과 뒤의 문자열을 사전 순서로 비교하여 앞 문자열이 먼저 나오면 음수 ,

뒤 문자열이 먼저 나오면 양수 , 같으면 0 을 반환

비교 기준은 아스키 코드 값 두 문자가 같다면 계속 다음 문자를 비교하여 , 다른 문자에서 앞 문자가

작으면 음수 , 뒤 문자가 작으면 양수 , 같으면 0 을 반환 strcmp(“java”, “javA”) 는 양수를 반환

• 대문자가 소문자보다 아스키 코드 값이 작으므로

int strcmp(const char *, const char *);

printf(“%d”, strcmp(“a”, “ab”)); // 음수 출력printf(“%d”, strcmp(“ab”, “a”)); // 양수 출력printf(“%d”, strcmp(“ab”, “ab”)); //0 출력

Page 14: 15  문자열

Perfect C14

함수 strcat() 함수 원형

앞 문자열의 마지막 NULL 문자에서부터 뒤 문자열의 NULL 문자까지 연결하여 , 앞의 문자열 주소를 반환

char * strcat(char *, const char *);

char stmt[25] = "Java is o-o ";char lang[] = "language.";printf("%s\n", strcat(stmt, lang));

Page 15: 15  문자열

Perfect C15

함수 strcpy() 함수원형

앞 문자열에 처음에 뒤 문자열을 복사하여 그 복사된 문자열을 반환 앞 문자열에 처음에 뒤 문자열을 NULL 문자까지 , 최대 n 개를

복사하여 그 복사된 문자열을 반환 : 예제 15-8

char * strcpy(char *, const char *);char * strncpy(char *, const char *, size_t n);

char stmt[30] = "Java is object oriented ";printf("%s\n", strcpy(stmt, “C”));

Page 16: 15  문자열

Perfect C16

함수 strtok() 함수원형

앞 문자열에서 뒤 문자열에 포함되어 있는 구분자를 기준으로 토큰을 추출 사용방법

다음 문자열에서 구분자를 공백 문자 , 쉼표 (,) 로 토큰을 분리 • "C, C++ language are best!"

• 분리되는 토큰 단어는 “ C”, “C++”, “language”, “are”, “best!” 5 개

char * strtok(char *, const char *);

char *delimiter = " ,";char str1[] = "C, C++ language are best!";ptoken = strtok(str1, delimiter);while ( ptoken != NULL ) {

printf("%s\n", ptoken);ptoken = strtok(NULL, delimiter);

}

Page 17: 15  문자열

Perfect C17

명령어 줄 도스 프롬프트에서 실행

Page 18: 15  문자열

Perfect C18

Command line argument 명령어 줄 전달인자

명령어 라인에서 입력하는 문자열을 프로그램으로 전달하는 방법이 명령어 줄 전달인자

명령어 줄 전달인자를 이용하지 않는다면 메인의 인자를 void 로 기술

메인 함수의 전달 인자 argc 는 명령어 줄에서 입력한 문자열의 수

메인 함수의 전달 인자 argv[] 는 명령어 줄에서 입력한 문자열을 전달 받는 문자 포인터 배열

int main(int argc, char *argv[]){

…}

Page 19: 15  문자열

Perfect C19

Visual C++ 에서 명령어 인자 명령어 인자를 설정

메뉴 Project 의 하부 메뉴 Settings… 를 눌러 다음 대화상자에서 설정

단축 키 Alt+F7 을 이용

대화상자 Project Settings 에서 탭 Debug 를 누르고 중간의 Program arguments:

• 하단의 입력 상자에 인자를 기술

• 이 입력 상자에는 실행파일 이름 뒤의 옵션만을 기술

Page 20: 15  문자열

Perfect C20

프로그래밍 실습 프로그램 목적

10 줄 이내에 걸쳐 문장을 입력 받아 행마다 입력된 문자열에서 모든 단어를 추출해 내는 프로그램

이용함수 줄을 입력 받기 위하여 함수 gets() 를 이용하고 , 토큰을 나누기 위해서 함수 strtok() 를 이용하며 , 각각의 토큰 길이를 알기 위하여 strlen() 을 이용

다음 조건을 만족 10 줄 이하의 여러 줄에 원하는 문장을 입력하고 , 입력이 다 되었으면 새로운 줄 처음에 키 ctrl+Z, 그리고 Enter 키를 입력하면 결과가 출력 토큰은 빈칸 , 쉼표 (,), 마침표 (.), 느낌표 (!) 그리고 탭 (\t) 으로

구분되는 단어로 길이와 토큰 문자열을 출력

Page 21: 15  문자열

Perfect C21

소스와 결과

Page 22: 15  문자열

Perfect C22

프로그래밍 과제

실습 : 문자처리 실습 15-6, 15-7, 노트 17 쪽 -21 쪽

과제 6 월 11 일 ( 월 ) 까지 프로그래밍하여 제출할 것

15 장 552 쪽 3, 554 쪽 3, 4, 8