문자열과 배열 문자열 입출력 문자열 처리 함수 문자 처리 함수 문자열의 배열 7장 문자열 문자열과 배열 문자열 입출력 문자열 처리 함수 문자 처리 함수 문자열의 배열
문자열과 배열 문자열 문자열과 배열 컴퓨터 내부 표현 "Korea" 문자들이 메모리의 연속적인 위치에 배치됨 널문자('\0')로 종료됨 (널문자는 문자열 끝을 의미) 문자열과 배열 문자열은 문자배열에 저장 가능 (문자배열의 크기 >= 문자 개수+1) 이어야 함 문자배열에 저장된 문자들이 '\0'으로 끝나지 않으면 문자열이 아님 널문자 공간 C 언어 프로그래밍
문자 배열 초기화 문자열을 사용하지 않는 초기화 문자열 상수로 초기화 strcpy() 함수를 사용한 초기화 잘못된 예 1. char s[4]; s[0] = 'd'; s[1] = 'a'; s[2] = 'y'; s[3] = '\0'; … 프로그램 내에서 초기화 2. char s[4] = { 'd', 'a', 'y', '\0' }; … 초기화 선언 문자열 상수로 초기화 char s[5] = "day"; … 배열크기는 문자 개수보다 1이상 커야 함 char s[ ] = "day"; … 배열크기가 문자열 저장에 필요한 크기로 됨 = 4 strcpy() 함수를 사용한 초기화 #include <string.h> … strcpy()함수 원형 선언 포함 char s[4]; … strcpy(s, "day"); … 프로그램 내에서 문자배열에 문자열 복사 잘못된 예 s = "day"; … (X) 배열은 치환 불가 C 언어 프로그래밍
문자열 입출력 문자열 입출력 문자열 입력 입력: scanf(), gets() 출력: printf(), puts() char a[80]; … gets(a) … '\n'이 입력될 때까지의 문자열을 문자배열 a로 입력 마지막에 '\n'대신에 '\0'을 저장함 scanf("%s", a); … 공백이 나올 때까지의 문자열을 a로 입력 배열 a앞에 &를 붙이지 않음 scanf("%[A-Za-z]", a); … 알파벳 문자(A-Z, a-z)로 구성된 문자열만 문자배열 a로 입력 scanf("%[^\n]", a) … '\n'이외의 문자로 구성된 문자열을 입력 gets(a)와 같은 동작 C 언어 프로그래밍
문자열 입출력 (2) 문자열 출력 printf("%s", a); … 문자배열 a에 저장된 문자열 출력 printf("%s", "Korea") … 문자열 "Korea" 출력 puts(a); … 문자배열 a에 저장된 문자열을 '\n'과 함께 출력 printf("%s\n", a); puts("Korea"); … 문자열 "Korea"를 '\n'과 함께 출력 printf("%10s", a); … 필드 폭 10 printf("%-10s", a); … 왼쪽정렬 printf("%10.3s", a); … 3 문자만 출력 Korea Korea Kor 10 C 언어 프로그래밍
예제 문자열 입출력 (출력) String Input Output [Enter] String Input Output String s = String gets 함수와 scanf 함수의 문자열 입력 동작 비교 puts 함수와 printf 함수의 문자열 출력 동작 비교 C 언어 프로그래밍
예제: 소문자를 대문자로 변환 (예 7.2) 한 줄을 입력하여 소문자를 대문자로 변환 후 출력 i가 최대 첨자보다 커지거나 (예 7.2) 한 줄을 입력하여 소문자를 대문자로 변환 후 출력 i가 최대 첨자보다 커지거나 s[i]가 널문자이면 반복문 종료 C 언어 프로그래밍
예제: 모든 입력에 대한 소문자대문자 변환 모든 입력에 대해서 소문자를 대문자로 변환하여 출력 gets()함수는 파일끝(EOF, DOS에서 Ctrl-Z)에 도달하면 NULL을 반환 NULL은 stdio.h에 정의되어 있는 기호상수(0) C 언어 프로그래밍
문자열 처리 함수 인수로 문자열을 사용하는 함수 (예 7.5) 문자열 길이 계산 함수 문자열 끝이 널문자로 끝나므로 배열 크기 인수 불필요 (예 7.5) 문자열 길이 계산 함수 널문자는 문자열 길이에 포함되지 않음 널문자의 첨자가 문자열 길이와 같음 s 1 2 3 4 5 길이 4 C 언어 프로그래밍
예제 (예 7.5) 문자열 복사 함수 이 함수를 호출할 때에 배열인수 s1의 크기가 배열인수 s2에 저장된 문자열을 저장할 수 있는 크기 이어야 함. char s1[6]; strcpy(s1, "beautiful"); ... 잘못임 C 언어 프로그래밍
문자열 라이브러리 함수 문자열 라이브러리 함수 표준 라이브러리 함수에서 문자열 처리 함수 제공 (표 7.1 참조) 헤더파일: #include <string.h> strcpy(s1,s2) 문자열 s2를 문자열 s1으로 복사 strcat(s1,s2) 문자열 s2를 문자열 s1뒤에 연결하여 붙임 strcmp(s1,s2) 문자열 s1과 s2를 사전식 비교 strlen(s1) 문자열 s1 길이 strncpy(s1, s2, n) 문자열 s2를 최대 n 문자까지 문자열 s1으로 복사 strncat(s1,s2,n) 문자열 s2를 최대 n 문자까지 문자열 s1뒤에 붙임 strncmp(s1,s2,n) 문자열 s1과 s2를 최대 n 문자까지 사전식 비교 문자열 비교는 s1이 사전식 순서로 s2보다 앞이면 음수를, 같으면 0을, 뒤이면 양수를 반환함. C 언어 프로그래밍
예제 strcat() 함수를 사용한 문자열 연결하기 char s1[13] = "pretty"; char s2[7] = "girl"; strcat(s1, s2); 문자 배열 s1의 크기가 연결한 문자열을 저장할 수 있는 크기이어야 함 C 언어 프로그래밍
예제: 세 문자열을 연결 (예 7.6) 세 문자열을 연결하여 하나의 문자열로 결합 출력: URL = http://www.yonsei.ac.kr/contents/admission/info.html C 언어 프로그래밍
예제: 특정 단어 입력 때까지 단어 수 세기 특정 단어가 입력될 때까지의 단어 수 세기 C 언어 프로그래밍
문자열과 숫자 사이의 변환 숫자 변환 함수 숫자와 문자열 사이의 변환 #include <stdlib.h> a = atoi(s); … 정수 문자열 s를 정수(int)로 변환 b = atol(s); … 정수 문자열 s를 긴 정수(long)로 변환 f = atof(s); … 실수 문자열 s를 실수(double)로 변환 숫자와 문자열 사이의 변환 표준입출력 대신에 문자열로 입출력 수행 sprintf(s, "형식지정 문자열", 출력 값 리스트); sscanf(s, "형식지정 문자열", 입력 변수들 리스트); 문자배열 s 출력 입력 sprintf(s, … ) sscanf(s, … ) C 언어 프로그래밍
예제 문자열 연결 (예7.9) 문자열로 표시된 숫자에 대한 곱셈, 결과를 문자열로 저장 sprintf(url, "%s%s%s", protocol, host, path); … url에 세 문자열이 연결된 문자열이 저장됨 (예7.9) 문자열로 표시된 숫자에 대한 곱셈, 결과를 문자열로 저장 C 언어 프로그래밍
문자 처리 함수 문자 처리 라이브러리 함수 표준라이브러리에서 문자 처리 함수 제공 (표 7.2 참조) 표준라이브러리에서 문자 처리 함수 제공 (표 7.2 참조) 헤더 파일: #include <ctype.h> isalpha(c) c가 알파벳이면 참 isdigit(c) c가 숫자이면 참 isalnum(c) c가 숫자/알파벳이면 참 isspace(c) c가 표준공백문자(공백,\n,\t 등) 이면 참 isupper(c) c가 대문자이면 참 islower(c) c가 소문자이면 참 ... tolower(c) c가 대문자이면 소문자로 변환하여 반환 toupper(c) c가 소문자이면 대문자로 변환하여 반환 C 언어 프로그래밍
문자열의 배열 문자열의 배열 예 문자열 1차원 문자배열에 저장 가능 문자열의 배열 2차원 문자배열에 저장 가능 문자열 1차원 문자배열에 저장 가능 문자열의 배열 2차원 문자배열에 저장 가능 예 char a[4][8] = { "fortran", "basic", "java", "c" }; 또는 char a[ ][8] = { "fortran", "basic", "java", "c" }; a[0] a[1] a[2] a[3] C 언어 프로그래밍
예제: 특정문자로 시작하는 문자열 출력하기 (예7.12수정) 2차원 배열에 저장된 모든 문자열 출력 2차원 배열에 저장된 문자열 중에서 j로 시작하는 문자열 출력 단어의 첫문자 비교 C 언어 프로그래밍
실습 문제 연산 이름과 연산을 할 두 정수를 입력 받아서 주어진 연산 결과를 출력하는 프로그램 작성 연산 이름: add sub mul div(몫) mod(나머지) power(거듭제곱) 입력 형식 add 1 2 출력: 3 power 3 4 출력: 81 교과서 221 페이지 8번 문제. C 언어 프로그래밍