반응형
문자열의 저장 방식
#10.4 문자열의 배열
🏃♂️ 다수의 문자열을 처리하는 방법을 학습한다.
다수의 문자열 처리하기(1): 문자 배열을 여러 개 사용
- 2차원 문자 배열 이용
int i;
char num[3][5] = {"zero", "one", "two"};
for( i=0; i<3; ++i )
printf("%s\n", num[i]);
여기서 num[0],num[1],num[2]의 자료형은 char *이다.
다수의 문자열 처리하기(2): 문자형 포인터를 여러 개 사용
char *pnum0 = "zero";
char *pnum1 = "one";
char *pnum2 = "two";
printf("%s\n",pnum);
printf("%s\n",pnum1);
printf("%s\n",pnum2);
다수의 문자열 처리하기(3): 문자 포인터 배열(포인터를 배열로 묶기)
위의 pnum0, pnum1, pnum2를 묶으면 포인터 배열이 됨.
int i;
char *pnum[3] = {"zero", "one", "two"};
for( i=0; i<3; ++i )
prinf("%s\n", pnum[i]);
#10.5 문자열 및 문자 처리 함수(1)
🏃♂️ 문자열 및 문자 처리 표준 함수의 사용법을 익힌다.
문자열 처리 표준 함수
- C언어에서는 문자열 처리에 관련된 다양한 표준 함수 제공
- 대부분 <string.h> 헤더 파일에 함수의 원형 선언되어 있음
- 이 헤더파일을 include 시켜야 함 -> #include <string.h>
- 대부분 문자열 처리 함수의 코드를 작성하는 것은 어렵지 않지만, 이미 구현되어 있는 표준 함수를 사용하는 것이 편리
문자열의 길이 구하기 1(직접 구현)
널 문자와 반복문을 이용하여 구할 수 있음.
char str[20] = "Hello World";
int i = 0;
while (str[i])
++i;
printf("length: %d\n",i);
문자열의 길이 구하기 2(표준 함수 strlen 이용)
- 원형: unsigned int strlen(char *s)
- 기능: 문자열 s의 길이 반환
int main() {
char str[20] = "Hello World";
printf("%length: %d\n", strlen(str))
return 0;
}
문자열 복사하기
- 원형: cahr *strcpy(char *dest, char *src)
- 기능: dest의 공간에 src의 문자열 복사(문자열 대입). src는 변화 없음
char str[6] = "Hello";
strcpy(str1, "hi");
printf("str1: %s!!\n",str1);
- 참고: strncpy() 함수: 복사할 문자열의 길이를 지정하는 함수
strcpy(dest,src) 사용 시 주의사항
- dest(목적지)의 공간이 src의 문자열 길이+1(널 문자) 이상이어야 함. 그렇지 않으면 런타임 오류.
문자열 접합하기
- char *strcat(char *dest, char *src)
- 기능: 문자열 뒤에 src의 문자열 접합. src는 변화 없음.
- 참고: strncat() 함수: 접합할 문자열의 길이를 지정하는 함수
#10.5 문자열 및 문자 처리 함수(2)
문자열 비교하기
- 원형: int strcmp(char *lhs, char *rhs)
- 기능: 사전 순으로 lhs와 rhs를 비교하여 음수/0/양수 반환
- 문자열 lhs<rhs -> 음수
- 문자열 lhs==rhs -> 0
- 문자열 lhs>rhs -> 양수
- 문자는 단순히 아스키 코드 값 비교함.
- 널 문자 '\n'가 가장 작음
- 문자가 같을 경우 다음 문자로 이동해서 비교
- 참고: strncmp() 함수: 비교할 문자열의 길이를 지정하는 함수
char s1[50] = "hi", s2[50] = "hello";
int cmp_result = strcmp(s1,s2);
if(cmp_result<0)
printf("%s가 %s보다 앞에 있습니다.\n",s1,s2);
else if(cmp_result == 0)
printf("%s가 %s와 같습니다. \n",s1,s2);
else
printf("%s가 %s보다 뒤에 있습니다.\n",s1,s2);
예제 10.6
사용자로부터 두 개의 문자열 A와 B를 입력 받아 다음 과정을 수행하는 프로그램을 작성하시오.
- 문자열 A와 B의 길이를 각각 출력
- A와 B 중 사전 순으로 빠른 문자열 출력
- ABA 형태의 새로운 문자열 C를 생성하고 출력
- A와 B의 길이는 20 이내이고 공백, 탭, 개행 문자는 없다고 가정
- 두 문자열은 서로 다르다고 가정
#include <stdio.h>
#include <string.h>
int main() {
char A[21], B[21], C[61], ch;
scanf("%s', A);
scanf("%c", &ch); // 엔터도 문자로 처리되므로 엔터 입력받아 버려줄 것 필요함
scanf("%s", B);
printf("%d %d\n", strlen(A), strlen(B));
if (strcmp(A,B) < 0)
printf("%s\n",A);
else
printf("%s\n", B);
strcpy(C, A);
strcat(C, B);
strcat(C, A);
printf("%s\n, C);
return 0;
}
10진수로 표현된 문자열을 수로 변환
- int atoi(char *str): 문자열을 입력받아 int형으로 계산하여 반환
- long atol(char *str): 문자열을 입력받아 long형으로 계산하여 반환
- double atof(char *str): 문자열을 입력받아 double형으로 계산하여 반환
- <stdlib.h>에 원형 선언되어 있음.(standard library)
#10.6 문자열 및 문자 입출력
🏃♂️ 문자열 및 문자 입출력 표준 함수의 사용법을 익힌다.
입출력 함수
- printf와 scanf: 다양한 기능을 가진 범용 입출력 함수
- 함수의 크기 크고, 속도 느림
- C언어에서는 문자열과 문자에 특화된 입출력 함수 제공
- 속도 빠르고, 문자 또는 문자열 입출력에 적합
- 문자열 입출력 함수: puts, gets(gets_s, fputs)
- 문자 입출력 함수: putchar, getchar
- 위 함수들은 모두 <stdio.h>에 선언되어 있음
문자열 출력 함수: int puts(char *str)
- str이 가리키는 문자열을 화면에 출력하고, 마지막에 '\n' 출력
- 반환 값: 출력에 성공하면 음수가 아닌 값, 실패하면 EOF
- 참고: EOF(End Of File): 파일의 끝을 나타내는 상수. -1.
char str[10] = "Hi World";
int ret = 1;
ret = puts(str);
printf("return: %d\n", ret); // puts 함수의 return 값 받아와서 출력
문자열 입력 함수: char *gets(char *s)
- 사용자로부터 문자열을 입력 받아, s가 가리키는 메모리 영역에 저장하고, 포인터 s를 리턴
- 엔터('\n')가 입력될 때까지 입력된 모든 문자들을 저장(scanf의 경우 공백, 탭, 개행이 입력될 때까지 저장)
- 마지막에 입력된 '\n'은 무시하고, 맨 뒤에 '\0'를 붙임
- 문자열을 저장할 충분한 메모리 공간이 확보되어 있어야 함
- 참고: gets_s()함수: gets() 함수의 보안 보전으로, 문자열을 저장할 배열 크기를 인자로 전달
참고) 보안 상의 문제로 gets() 함수는 표준에서 제외되고, gets_s() 함수가 표준에 추가됨
- VS의 경우 2015 버전부터 gets() 함수 지원 안 함 -> gets_s() 사용
- gcc의 경우, 아직 gets()를 지원하고, gets_s()를 지원하지 않음
- gcc 사용하는 온라인 채점 시스템(OJ)는 gets() 사용해야 함
- 또는 대안으로 fgets 함수 사용
- 개행 문자도 문자열에 저장. 파일 처리할 때 사용됨.
-
char str[10]; fgets(str, 10, stdin); printf("str: %s!!", str);
문자 입출력 함수:
- int putchar(int c): 인자 c의 문자를 화면에 출력
- int getchar(void): 사용자로부터 입력된 문자 반환
- 성공하면 입출력된 문자 반환, 실패하면 EOF 반환
int c;
c=getchar(); //H 입력
purtchar(c); //H 출력
반응형
'Algorithm > C프로그래밍' 카테고리의 다른 글
[10주차] 동적 할당 (4) | 2021.11.05 |
---|---|
[9주차] 동적 할당 (0) | 2021.11.05 |
[4주차] 문자열 (0) | 2021.09.27 |
[2주차] 포인터(3), (4) (4) | 2021.09.13 |
[1주차] 2. 포인터(2) (0) | 2021.09.13 |