7장 문자열      문자열과 배열 문자열 입출력 문자열 처리 함수 문자 처리 함수 문자열의 배열 문자열과 배열  문자열 컴퓨터 내부 표현 "Korea"  문자들이 메모리의 연속적인 위치에 배치됨  널문자('\0')로 종료됨 (널문자는 문자열.

Download Report

Transcript 7장 문자열      문자열과 배열 문자열 입출력 문자열 처리 함수 문자 처리 함수 문자열의 배열 문자열과 배열  문자열 컴퓨터 내부 표현 "Korea"  문자들이 메모리의 연속적인 위치에 배치됨  널문자('\0')로 종료됨 (널문자는 문자열.

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