1 / 22

15 문자열

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

gwidon
Download Presentation

15 문자열

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2007 1학기 15 문자열

  2. 문자의 집합체 • 문자열의 정의 • 일련의 문자 • C 언어에서 문자열 앞 뒤에 인용부호 “”를 이용 • 문자와 문자열과의 차이 • 문자열의 저장 • 배열을 이용하여 문자열을 저장 • 문자열 상수 “C language”를 저장하는 문자열 배열 • 항상 문자열 마지막에는 NULL문자를 넣어야 함 • 예제 15-1 Perfect C

  3. 문자 포인터 배열의 이용 • 처리하려는 문자열의 수 만큼의 문자 포인터 이용 • 래기드(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"); Perfect C

  4. 문자 2차원 배열을 이용 • 문자 2차원 배열 • 2차원 배열의 열의 크기는 문자열 중에서 가장 긴 문자열의 길이보다 1 크게 지정하고, 2차원 배열의 행의 크기는 문자열의 개수로 지정 • 문자 이차원 배열 strary를 이용하여 각 문자열을 출력하려면 strary[i]로 변환 명세 %s를 이용 char strary[][5] = {"c", "c++", "java", "c#"}; for (i = 0; i < 4; ) printf("%-8s", strary[i++]); //printf("%-8s", *(strary + i++)); printf("\n"); Perfect C

  5. 예제 소스 • strarray.c • 문자열 배열을 문자 포인터 배열과 문자 2차원 배열로 저장하고, 필요한 문자열과 문자를 참조하는 프로그램 Perfect C

  6. 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); Perfect C

  7. 파일 입출력 함수의 이용 • 함수 fgets() • 두 번째 인자는 입력할 문자의 수이고, 세 번째 인자는 입력될 문자열의 파일 • 문자열을 개행문자까지 읽어 개행문자도 함께 입력 문자열에 저장 • 함수 fputs() • 문자열을 그대로 출력 • 표준 입출력 상수 • stdin, stdout • 여러 줄의 입력 후 출력 char * fgets(char *, int, FILE *); int fputs(const char *, FILE *); while (fgets(line, LINENUM, stdin)) { fputs(line, stdout); } Perfect C

  8. 버퍼링에 의한 문자 입출력 • 함수 getchar(), putchar() • 라인 버퍼링(line buffering) • 입력된 자료가 버퍼에 저장되고 Enter 키를 만나야 getchar() 함수가 작동 char ch; printf("문자를 계속 입력하고 Enter를 누르면 >>\n"); while ((ch=getchar()) != 'q') putchar(ch); Perfect C

  9. 버퍼링을 사용하지 않는 문자 입력 • 함수 getche() • 버퍼를 이용하지 않고 문자 하나 하나를 바로 처리하는 함수 • 헤더파일 conio.h 파일을 첨가 • 버퍼를 사용하지 않으므로 문자 하나를 입력하면 바로 함수 getche()를 실행하고 입력 문자가 ‘q’가 아니면 함수 putchar()에 의하여 문자가 바로 출력 char ch; printf("\n문자를 누를 때마다 두 번 출력 >>\n"); while ((ch=getche()) != 'q') putchar(ch); Perfect C

  10. 버퍼링과 에코가 없는 문자 입력 • 함수 getch() • 함수 getche()와 마찬가지로 버퍼를 사용하지 않는 입력함수 • 헤더파일 conio.h 파일을 첨가 • 입력한 문자를 화면에 보이지 않는 특성, 입력한 문자를 출력함수로 출력하지 않으면 그 문자가 화면에 나타나질 않음 char ch; printf("\n문자를 누를 때마다 한 번 출력 >>\n"); while ((ch=getch()) != 'q') putchar(ch); Perfect C

  11. 문자처리 함수 • 관련 함수 • 문자처리 함수는 헤더파일 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' ) Perfect C

  12. 문자열 함수 • 문자열 관련 함수 • 문자열 처리 라이브러리 함수는 헤더파일 string.h에 함수 원형이 정의 • 문자열 처리 라이브러리 함수는 대부분 이름 str----()로 명명 • 함수 strcmp() • 두 문자열을 비교하는 함수 • 함수 strlen() • 문자열에서 처음의 NULL 문자를 제외한 문자열의 길이를 반환 • 함수 strcpy() • 앞 문자열에 처음에 뒤 문자열을 복사하여 그 복사된 문자열을 반환 • 함수 strcat() • 앞 문자열에 뒤 문자열을 연결(concatenate) 저장하여, 이 연결된 문자열을 반환 • 함수 strtok() • 앞 문자열에서 뒤 문자열에 포함되어 있는 구분자를 기준으로 토큰을 추출 Perfect C

  13. 함수 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 출력 Perfect C

  14. 함수 strcat() • 함수 원형 • 앞 문자열의 마지막 NULL 문자에서부터 뒤 문자열의 NULL 문자까지 연결하여, 앞의 문자열 주소를 반환 char * strcat(char *, const char *); char stmt[25] = "Java is o-o "; char lang[] = "language."; printf("%s\n", strcat(stmt, lang)); Perfect C

  15. 함수 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”)); Perfect C

  16. 함수 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); } Perfect C

  17. 도스 프롬프트에서 실행 명령어 줄 Perfect C

  18. Command line argument • 명령어 줄 전달인자 • 명령어 라인에서 입력하는 문자열을 프로그램으로 전달하는 방법이 명령어 줄 전달인자 • 명령어 줄 전달인자를 이용하지 않는다면 메인의 인자를 void로 기술 • 메인 함수의 전달 인자 argc는 명령어 줄에서 입력한 문자열의 수 • 메인 함수의 전달 인자 argv[]는 명령어 줄에서 입력한 문자열을 전달 받는 문자 포인터 배열 int main(int argc, char *argv[]) { … } Perfect C

  19. Visual C++에서 명령어 인자 • 명령어 인자를 설정 • 메뉴 Project의 하부 메뉴 Settings…를 눌러 다음 대화상자에서 설정 • 단축 키 Alt+F7을 이용 • 대화상자 Project Settings에서 탭 Debug를 누르고 중간의 Program arguments: • 하단의 입력 상자에 인자를 기술 • 이 입력 상자에는 실행파일 이름 뒤의 옵션만을 기술 Perfect C

  20. 프로그래밍 실습 • 프로그램 목적 • 10줄 이내에 걸쳐 문장을 입력 받아 행마다 입력된 문자열에서 모든 단어를 추출해 내는 프로그램 • 이용함수 • 줄을 입력 받기 위하여 함수 gets()를 이용하고, • 토큰을 나누기 위해서 함수 strtok()를 이용하며, • 각각의 토큰 길이를 알기 위하여 strlen()을 이용 • 다음 조건을 만족 • 10줄 이하의 여러 줄에 원하는 문장을 입력하고, • 입력이 다 되었으면 새로운 줄 처음에 키 ctrl+Z, • 그리고 Enter 키를 입력하면 결과가 출력 • 토큰은 빈칸, 쉼표(,), 마침표(.), 느낌표(!) 그리고 탭(\t)으로 구분되는 단어로 길이와 토큰 문자열을 출력 Perfect C

  21. 소스와 결과 Perfect C

  22. 프로그래밍 과제 • 실습 : 문자처리 실습 15-6, 15-7, 노트 17쪽-21쪽 • 과제 6월 11일(월)까지 프로그래밍하여 제출할 것 • 15장 552쪽 3, 554쪽 3, 4, 8 Perfect C

More Related