티스토리 뷰
반응형
C언어 기초 Chapter 21: 문자열과 문자열 관련 함수
21-1. 스트링과 데이터의 이해
- 문자열(String): 문자들의 배열 + 마지막에 \0 (널 문자)
- 선언 방법:
char str1[6] = {'H','e','l','l','o','\0'};
char str2[] = "Hello"; // 자동으로 \0 포함
- 출력 예제:
#include <stdio.h>
int main(void) {
char str[] = "Hello";
printf("%s\n", str);
return 0;
}
👉 출력: Hello
21-2. 문자열 단일 입력 함수
gets (❌ 사용 지양: 안전하지 않음)
fgets (✅ 안전한 문자열 입력)
#include <stdio.h>
int main(void) {
char str[20];
printf("문자열 입력: ");
fgets(str, sizeof(str), stdin);
printf("입력된 문자열: %s", str);
return 0;
}
21-3. 문자열 단일 출력 함수
puts
- 문자열을 출력하고 자동으로 줄바꿈
#include <stdio.h>
int main(void) {
char str[] = "Hello C";
puts(str);
return 0;
}
👉 출력:
Hello C
21-4. 표준 입출력에서 문자열 관련 함수
주요 함수
- scanf("%s", str); → 공백 전까지 입력
- printf("%s", str); → 문자열 출력
- getchar() → 문자 1개 입력
- putchar(c) → 문자 1개 출력
예제:
#include <stdio.h>
int main(void) {
char c;
printf("문자 입력: ");
c = getchar(); // 문자 1개 입력
printf("입력한 문자: ");
putchar(c); // 문자 1개 출력
return 0;
}
21-5. 문자열 이해와 문자열 관련 함수
C 표준 라이브러리 <string.h> 제공 함수들:
문자열 길이 구하기: strlen
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello";
printf("길이: %zu\n", strlen(str));
return 0;
}
문자열 복사: strcpy, strncpy
char src[] = "World";
char dest[10];
strcpy(dest, src); // dest = "World"
문자열 연결: strcat, strncat
char str1[20] = "Hello ";
char str2[] = "World";
strcat(str1, str2); // "Hello World"
문자열 비교: strcmp, strncmp
if (strcmp("abc", "abc") == 0) printf("같음\n");
핵심 정리 ✅
- 문자열은 문자 배열 + \0
- 입력: fgets 추천, 출력: puts, printf
- <string.h> 함수로 문자열 조작 가능 (길이, 복사, 연결, 비교)
연습 문제 ✍️
- 문자열을 입력받아 길이를 출력하는 프로그램을 작성하세요.
- 두 문자열을 입력받아 이어 붙여 출력하세요.
- 두 문자열을 입력받아 같은지 비교하세요.
- 문자열 배열을 이용해 이름 3개를 입력받아 모두 출력하세요.
👉 연습문제 정답▼
Chapter 21 연습문제 풀이
1) 문자열을 입력받아 길이 출력하기
#include <stdio.h>
#include <string.h>
int main(void) {
char str[100];
printf("문자열 입력: ");
fgets(str, sizeof(str), stdin);
// fgets로 입력 시 마지막에 개행(\n)이 포함될 수 있어 제거
str[strcspn(str, "\n")] = '\0';
printf("문자열 길이 = %zu\n", strlen(str));
return 0;
}
👉 실행 예시
문자열 입력: Hello
문자열 길이 = 5
2) 두 문자열을 입력받아 이어 붙여 출력하기
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[100], str2[100];
printf("첫 번째 문자열 입력: ");
fgets(str1, sizeof(str1), stdin);
str1[strcspn(str1, "\n")] = '\0'; // 개행 제거
printf("두 번째 문자열 입력: ");
fgets(str2, sizeof(str2), stdin);
str2[strcspn(str2, "\n")] = '\0'; // 개행 제거
strcat(str1, str2); // 문자열 이어 붙이기
printf("결과: %s\n", str1);
return 0;
}
👉 실행 예시
첫 번째 문자열 입력: Hello
두 번째 문자열 입력: World
결과: Hello World
3) 두 문자열을 입력받아 같은지 비교하기
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[100], str2[100];
printf("첫 번째 문자열 입력: ");
fgets(str1, sizeof(str1), stdin);
str1[strcspn(str1, "\n")] = '\0';
printf("두 번째 문자열 입력: ");
fgets(str2, sizeof(str2), stdin);
str2[strcspn(str2, "\n")] = '\0';
if (strcmp(str1, str2) == 0)
printf("두 문자열은 같습니다.\n");
else
printf("두 문자열은 다릅니다.\n");
return 0;
}
👉 실행 예시
첫 번째 문자열 입력: apple
두 번째 문자열 입력: apple
두 문자열은 같습니다.
4) 문자열 배열을 이용해 이름 3개 입력받아 출력하기
#include <stdio.h>
int main(void) {
char names[3][50]; // 이름 3개, 각 이름 최대 49자 저장 가능
for (int i = 0; i < 3; i++) {
printf("%d번째 이름 입력: ", i + 1);
fgets(names[i], sizeof(names[i]), stdin);
// 개행 제거
int len = 0;
while (names[i][len] != '\0') {
if (names[i][len] == '\n') {
names[i][len] = '\0';
break;
}
len++;
}
}
printf("\n입력된 이름들:\n");
for (int i = 0; i < 3; i++) {
printf("%s\n", names[i]);
}
return 0;
}
👉 실행 예시
1번째 이름 입력: Kim
2번째 이름 입력: Lee
3번째 이름 입력: Park
입력된 이름들:
Kim
Lee
Park
핵심 정리 ✅
- strlen → 문자열 길이
- strcat → 문자열 붙이기
- strcmp → 문자열 비교
- 문자열 배열(char arr[3][50]) → 여러 문자열 저장 가능
반응형
'[문법] C언어' 카테고리의 다른 글
14) C언어 구조체와 사용자 정의 자료형: typedef, 중첩 구조체, union, enum 정리 (0) | 2025.09.07 |
---|---|
12) C언어 함수 포인터와 void 포인터 완전정리 (2) | 2025.09.02 |
11) C언어 다차원 배열과 포인터 완전정리: 2차원 배열부터 포인터까지 (2) | 2025.09.02 |
10) C언어 포인터의 포인터: 이중 포인터 개념, 함수 활용, 동적 메모리 할당 (0) | 2025.09.02 |
9) C언어 포인터와 함수: 배열 전달, Call by Value vs Reference, const 정리 (2) | 2025.09.01 |