Download presentation
Presentation is loading. Please wait.
1
Part 11 문자열 ©우균, 창병모 ©우균, 창병모
2
이 장의 내용 문자열과 문자배열 포인터와 문자열 문자열과 포인터 배열 문자열 입출력 문자열 함수
main() 함수의 명령줄 인수 ©우균, 창병모
3
11.1 문자열과 문자배열 ©우균, 창병모
4
문자열(string) 0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다. 예
0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다. 예 "Hello" : 문자열 "A" : 문자열 'A' : 문자 C 언어에서 문자열은 문자 배열 형태로 저장된다. ©우균, 창병모
5
문자열 변수의 선언과 초기화 문자 배열 형태로 선언하며 배열의 크기는 문자 배열 선언 및 예 문자열 변수 초기화
문자 배열 형태로 선언하며 배열의 크기는 저장할 문자열 길이보다 최소 1 이상 커야 함. 문자 배열 선언 및 예 char 배열명[크기]; char s[16]; 문자열 변수 초기화 char 배열명[크기] = "문자열"; char 배열명[ ] = "문자열"; ©우균, 창병모
6
문자열 변수의 선언과 초기화 예를 들어 char s[16] ="C programming !";
char t[ ] = "C programming !"; char s[ ] = "C 프로그래밍 !"; char s[16]= {'C',' ','p','r','o','g','r','a','m','m','i','n','g',' ','!','\0'}; ©우균, 창병모
7
cprogramming.c 실행결과: C 프로그래밍 ! ©우균, 창병모
8
11.2 포인터와 문자열 ©우균, 창병모
9
포인터와 문자열 문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 예를 들어 char *포인터변수명;
char *p = "Hello"; char m[] = "world"; H e l l o \0 p m[0] m[1] m[2] m[3] m[4] m[5] m w o r l d \0 ©우균, 창병모
10
포인터 대입 p = m; 실행 후 H e l l o \0 p w o r l d \0 m m[0] m[1] m[2] m[3]
©우균, 창병모
11
print.c 실행결과: Hello! ©우균, 창병모
12
포인터를 이용한 문자열 입력 문자형 포인터 변수의 선언 예 1 (실행 시간 오류) 예 2 예 3
포인터(주소)를 저장하기 위한 기억공간만 할당 문자열이 저장될 기억장소는 확보되지 않음 예 1 (실행 시간 오류) char *name; scanf("%s", name); 예 2 char name[81]; 예 3 char name[81], *p = name; scanf("%s", p); ©우균, 창병모
13
11.3 문자열과 포인터 배열 ©우균, 창병모
14
문자열과 포인터 배열 여러 개의 문자열을 저장하는 방법 포인터 배열(pointer array) 이용
문자형의 이차원 배열을 사용 char colors[3][10]= {"red", "blue", "white"}; 포인터 배열(pointer array) 이용 배열의 각 원소가 포인터인 배열을 포인터 배열이라고 한다. 여러 개의 문자열들을 저장하는데 사용 char *colorp[3] = {"red", "blue", "white"}; ©우균, 창병모
15
문자열과 포인터 배열 r e d \0 colors[0] colors[1] b l u e \0 colors[2]
w h i t e \0 r e d \0 b l u e \0 colorp[0] colorp[1] colorp[2] ©우균, 창병모
16
pointerArray.c 실행결과: red blue white ©우균, 창병모
17
11.4 문자열 입출력 ©우균, 창병모
18
문자열 입출력: gets()와 puts()
한 번에 한 문자열을 입력/출력할 수 있다. char *gets(char *str); 표준 입력으로부터 문자열을 읽어 들여 문자형 포인터 str이 가리키는 기억장소에 저장하고 포인터 str를 리턴한다 int puts(char *str); str이 가리키는 문자열을 표준 출력에 출력한다. ©우균, 창병모
19
sscanf()와 sprintf() sscanf() 함수와 sprintf() 함수
scanf(), printf() 함수와 사용 방법과 역할은 비슷함. 표준 입출력 대신에 문자열에 대해 입출력 int sprintf(char *str, char *format, ...); 문자열에 출력하는 함수로 포인터 str이 가리키는 곳에 문자열 형태로 출력한다. int sscanf(char *str, char *format, ...); 문자열로부터 입력을 받는 함수로 포인터 str이 가리키는 문자열로부터 데이터를 읽어 들인다. ©우균, 창병모
20
stringio.c 실행결과: C programming language C programming language
C programming language is beautiful ©우균, 창병모
21
11.5 문자열 함수 ©우균, 창병모
22
문자열관련 라이브러리 함수 문자열 함수 설명 strlen(str) 문자열 str의 길이를 리턴한다.
strcpy(str1, str2) 문자열 str2를 str1으로 복사한다. strcat(str1, str2) 문자열 str2를 str1에 접합한다. strcmp(str1, str2) 문자열 str1과 str2를 비교한다. strchr(str, ch) 문자열 str에서 문자 ch가 처음 나타난 위치를 리턴한다. strstr(str1, str2) 문자열 str1에서 문자 str2가 처음 나타난 위치를 리턴한다. strtok(str1, str2) 문자열 str1에서 문자열 str2 내의 문자를 토큰으로 하여 다음 토큰의 포인터를 리턴한다. atoi(str) 문자열 str을 int 정수로 변환하여 리턴한다. atol(str) 문자열 str을 long int 정수로 변환하여 리턴한다. atof(str) 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모
23
문자열 길이 함수 문자열의 길이는 문자열 내에 있는 문자의 개수이다. int strlen(char *str);
문자열의 끝에 있는 '\0'은 길이에 포함되지 않음 ©우균, 창병모
24
stringLength.c 실행결과: 문자열들을 입력하세요 spring 문자열의 길이: 6 summer 문자열의 길이: 6
문자열의 길이: 6 winter fall 문자열의 길이: 4 전체 문자열의 개수: 4 전체 문자열의 길이의 합: 22 ©우균, 창병모
25
문자열 복사함수 strcpy(t,s) char *strcpy(char *str1, char *str2);
문자열 str2를 str1에 복사하고 포인터 str1을 리턴 str1이 가리키는 기억 장소는 문자열을 복사할 수 있을 만큼 충분히 커야 함. char *strncpy(char *str1, char *str2, int n) str2의 최대 n바이트를 str1에 복사 ©우균, 창병모
26
stringCopy.c 실행결과: 문자열 s = Hello 문자열 t = Hello 문자열 p = world
문자열 q = world 문자열 s = Good 문자열 p = Bye 문자열 q = Bye ©우균, 창병모
27
stringCopy.c 문자열 복사 문자열 변경 후 ©우균, 창병모
28
문자열 접합 함수 strcat() 함수 char *strcat(char *str1, char *str2);
두 문자열을 접합하여 새로운 문자열을 만드는 함수 char *strcat(char *str1, char *str2); str1의 문자열 끝('\0')에 str2의 문자열 시작을 접합한다. str1의 기억장소는 두 문자열을 연결할 수 있을 만큼 충분히 커야 한다 포인터 str1을 리턴한다. char *strncat(char *str1, char *str2, int n) 최대 n개의 문자를 접합 ©우균, 창병모
29
문자열 접합 예 char s[80] = "Hello "; char t[] = "world"; strcat(s,t);
strcat(s,t) 실행 전 strcat(s,t) 실행 후 ©우균, 창병모
30
stringCat.c ©우균, 창병모
31
실행 결과 실행결과: 목적이 있는 인생을 살도록 합시다. ^Z 입력된 문자열의 개수: 3
입력된 문자열의 개수: 3 접합된 전체 문자열: 목적이 있는 인생을 살도록 합시다. 접합된 전체 문자열 길이: 33 ©우균, 창병모
32
문자열 비교 함수 strcmp() 함수 char *strcmp(char *str1, char *str2);
두 개의 문자열을 차례로 한 문자씩 비교하는 함수 char *strcmp(char *str1, char *str2); 두 문자열을 차례로 한 문자씩 비교한다. 두 문자열이 같으면 0을 리턴 다르면 서로 다른 문자의 차이(ASCII 코드값의 차이)를 리턴 str1 문자열이 str2 문자열 보다 크면 양수를 작으면 음수 리턴 char *strncmp(char *str1, char *str2, int n) 최대 n개의 문자까지 비교 ©우균, 창병모
33
stringCmp.c 실행결과: -4 C Language C Programming ©우균, 창병모
34
문자열 내의 특정 문자 검색 함수 strchr(), strrchr() 함수
문자열 내의 특정 문자의 위치를 검색하는 함수이다. 문자열 내의 특정 문자가 처음/마지막으로 나타난 위치(포인터) char *strchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 처음으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. char *strrchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 마지막으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. ©우균, 창병모
35
stringChr.c 실행결과: rogramming ramming ©우균, 창병모
36
문자열 내의 특정 문자열 검색 함수 strtrstr() 함수
문자열 내의 특정 문자열의 위치를 검색하는 함수 char *strstr(char *str1, char *str2); str2이 가리키는 문자열을 str1이 가리키는 문자열에서 찾아 처음으로 발견되는 문자열의 위치 포인터를 리턴 찾는 문자열이 없으면 NULL을 리턴 ©우균, 창병모
37
stringStr.c 실행결과: Language Programming ©우균, 창병모
38
문자열 변환 함수 수를 나타내는 문자열을 읽어 들이면 문자열 형태로 저장 산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환
산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환 int atoi(char *str); 문자열 str을 int 정수로 변환하여 리턴한다. long atol(char *str); 문자열 str을 long int 정수로 변환하여 리턴한다. double atof(char *str); 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모
39
intSum.c ©우균, 창병모
40
실행결과 실행결과: 구매한 금액들을 입력하세요. 25000 1800 99000 800 ^Z
총 4 개 구매하였고 총액은 입니다 ©우균, 창병모
41
floatSum.c ©우균, 창병모
42
실행결과 실행결과: 구매한 금액들을 입력하세요. 15.5 31.40 180.05 29.99 ^Z
총 4 개를 구매하였고 총액은 입니다 ©우균, 창병모
43
토근 추출 strtok() 함수 char *strtok(char *str1, char *str2);
하나의 큰 문자열로부터 토큰(단어)을 추출해 내는 함수 긴 문자열 내에 있는 각 단어에 대한 조작에 사용 char *strtok(char *str1, char *str2); str2 문자열에 포함되어 있는 문자들을 분리자(delimiter)로 사용 포인터 str1이 가리키는 문자열에서 토큰을 추출 처음 호출: 최초의 토큰에 대한 포인터가 리턴 다음 호출: str1 대신에 NULL을 지정하여 다음 토큰의 포인터가 리턴 이 함수가 NULL을 리턴할 때까지 이 과정을 반복 가능 ©우균, 창병모
44
stringTok.c 실행결과: C language programming ©우균, 창병모
45
11.6 main()의 인수 ©우균, 창병모
46
명령줄 인수(command-line argument)
int main(int argc, char *argv[])의 2개의 매개변수 int argc 명령줄 인수들의 개수를 저장하기 위한 정수형 변수 char *argv[]; 명령줄 인수들을 저장하기 위한 문자열 포인터 배열 argv[0] 실행 프로그램의 이름 argv[1] 첫 번째 인수 argv[2] 두 번째 인수 argv[i] i 번째 인수 ©우균, 창병모
47
명령줄 인수 C\:> echo hello world ©우균, 창병모
48
echo1.c 실행결과: C:> echo1 hello, world hello, world ©우균, 창병모
49
echo2.c ©우균, 창병모
50
Key Point ©우균, 창병모
51
Key Point 1 C 언어에서 문자열은 문자 배열 형태로 저장된다.
문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 배열의 각 원소가 포인터인 배열을 포인터 배열이라 한다. gets(), puts() 한 번에 하나의 문자열을 입력 혹은 출력한다. atoi(str) 문자열 str을 int 정수로 변환하여 리턴한다. atol(str) 문자열 str을 long int 정수로 변환하여 리턴한다. atof(str) 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. main()의 매개변수 argc, argv argc는 명령어 줄 인자의 개수를 저장하기 위한 정수형 변수 argv는 명령줄 인수들을 저장하기 위한 문자열 포인터 배열. ©우균, 창병모
52
Key Point 2 strlen(str) 문자열 str의 길이를 리턴한다. strcpy(str1, str2)
strcat(str1, str2) 문자열 str2를 str1과 접합한다. strcmp(str1, str2) 문자열 str1과 str2를 비교한다. strchr(str, ch) 문자열 str에서 문자 ch가 처음 나타난 위치를 리턴한다. strstr(str1, str2) 문자열 str1에서 문자 str2가 처음 나타난 위치를 리턴한다. strtok(str1, str2) 문자열 str1에서 문자열 str2 내의 문자를 토큰으로 하여 다음 토큰의 포인터를 리턴한다. ©우균, 창병모
53
프로그래밍 실습 ©우균, 창병모
54
▶ 프로그래밍 실습 1. 입력으로 받은 여러 줄의 문자열에 대해서 문자의 개수를 출력하는 프로그램을 작성하여라.
(1) 한 번에 한 문자씩 파일 끝까지 읽으면서 문자의 개수를 계산한다. ©우균, 창병모
55
▶ 프로그래밍 실습 2. 위 프로그램을 확장하여 단어의 개수와 줄의 개수도 출력하는 프로그램을 작성하여라.
(1) 한 번에 한 문자씩 파일 끝까지 읽으면서 단어의 개수와 줄의 개수를 계산한다. (2) 단어와 단어 사이에는 하나 이상의 공백 문자가 있다. 공백을 만날 때마다 단어의 개수를 증가시킨다. (3) 줄의 개수는 개행문자('\n')의 개수를 세면된다. 따라서 개행문자('\n')를 만날 때마다 줄의 개수를 증가시킨다. ©우균, 창병모
Similar presentations