728x90
반응형
문자열 (Strings)
- 문자열은 문자 배열이며 마지막에 **'\0'**으로 종료.
- C에서 문자열 처리는 **<string.h>
** 라이브러리의 다양한 함수를 통해 수행. 3. 문자열 처리 주요 함수:
- strlen: 문자열 길이 반환.
- strcpy, strncpy: 문자열 복사.
- strcat, strncat: 문자열 연결.
- strcmp, strncmp: 문자열 비교.
- strchr, strstr: 특정 문자 또는 문자열 검색.
- 동적 메모리를 통해 문자열 크기를 유연하게 관리 가능.
strlen | 문자열 길이 계산 |
strcpy | 문자열 복사 |
strcat | 문자열 연결 |
strcmp | 문자열 비교 |
strchr | 특정 문자 검색 |
strstr | 특정 문자열 검색 |
strtok | 문자열 분리 |
memset | 메모리 초기화 |
memcpy | 메모리 복사 |
13.1 문자열이란?
- 문자열은 문자의 배열로, 마지막에 **널 문자 (\0)**로 종료됩니다.
- 문자열의 크기는 실제 문자 수보다 1 더 큽니다. (\0 포함)
문자열 선언
char str[10] = "Hello"; // "Hello\0" 저장
char str[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 동일한 표현
13.2 문자열과 배열
문자열 출력
- 문자열을 출력하려면 %s 포맷을 사용합니다.
예제: 문자열 출력
#include <stdio.h>
int main(void) {
char str[] = "Hello, World!";
printf("문자열: %s\n", str);
return 0;
}
출력 결과:
문자열: Hello, World!
문자열 입력
- 문자열 입력 시 scanf 또는 **fgets**를 사용합니다.
scanf 예제:
#include <stdio.h>
int main(void) {
char str[50];
printf("문자열 입력: ");
scanf("%s", str); // 공백 전까지만 입력받음
printf("입력된 문자열: %s\n", str);
return 0;
}
출력 결과:
문자열 입력: Hello World
입력된 문자열: Hello
fgets 예제:
#include <stdio.h>
int main(void) {
char str[50];
printf("문자열 입력: ");
fgets(str, sizeof(str), stdin); // 공백 포함 입력 가능
printf("입력된 문자열: %s", str);
return 0;
}
출력 결과:
문자열 입력: Hello World
입력된 문자열: Hello World
13.3 문자열과 포인터
포인터로 문자열 관리
- 문자열은 문자 배열로 표현되지만, 포인터로도 관리 가능합니다.
예제: 문자열 포인터
#include <stdio.h>
int main(void) {
char *str = "Hello, Pointer!";
printf("문자열: %s\n", str);
return 0;
}
출력 결과:
문자열: Hello, Pointer!
13.4 문자열 라이브러리 함수
C 표준 라이브러리 **<string.h>**는 문자열 처리를 위한 다양한 함수를 제공합니다.
1) 문자열 길이 (strlen)
- 문자열의 길이를 반환 (\0 제외).
사용법:
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello";
printf("문자열 길이: %lu\n", strlen(str)); // 출력: 5
return 0;
}
2) 문자열 복사 (strcpy와 strncpy)
- strcpy: 문자열을 다른 문자열에 복사.
- strncpy: 복사할 최대 길이 지정.
예제:
#include <stdio.h>
#include <string.h>
int main(void) {
char src[] = "Source";
char dest[20];
strcpy(dest, src); // src의 내용을 dest에 복사
printf("복사된 문자열: %s\n", dest);
return 0;
}
출력 결과:
복사된 문자열: Source
3) 문자열 연결 (strcat와 strncat)
- strcat: 문자열을 다른 문자열에 연결.
- strncat: 연결할 최대 길이 지정.
예제:
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[20] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2); // str2를 str1에 연결
printf("연결된 문자열: %s\n", str1);
return 0;
}
출력 결과:
연결된 문자열: Hello, World!
4) 문자열 비교 (strcmp와 strncmp)
- strcmp:
- 두 문자열을 비교.
- 같으면 0, 앞 문자열이 작으면 음수, 크면 양수 반환.
- strncmp: 비교할 최대 길이 지정.
예제:
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[] = "Hello";
char str2[] = "World";
if (strcmp(str1, str2) == 0) {
printf("문자열이 같습니다.\n");
} else {
printf("문자열이 다릅니다.\n");
}
return 0;
}
출력 결과:
문자열이 다릅니다.
5) 문자열 검색 (strchr와 strstr)
- strchr: 문자열에서 특정 문자를 찾음.
- strstr: 문자열에서 특정 문자열을 찾음.
strchr 예제:
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello, World!";
char *pos = strchr(str, 'W'); // 'W' 찾기
if (pos != NULL) {
printf("문자 'W' 위치: %ld\n", pos - str);
} else {
printf("문자를 찾을 수 없습니다.\n");
}
return 0;
}
출력 결과:
문자 'W' 위치: 7
strstr 예제:
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello, World!";
char *pos = strstr(str, "World"); // "World" 찾기
if (pos != NULL) {
printf("문자열 'World' 위치: %ld\n", pos - str);
} else {
printf("문자열을 찾을 수 없습니다.\n");
}
return 0;
}
출력 결과:
문자열 'World' 위치: 7
13.5 문자열과 동적 메모리
동적 메모리를 이용한 문자열 처리
- 동적으로 문자열의 크기를 지정.
예제:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *str;
char input[] = "Dynamic Memory";
str = (char *)malloc(strlen(input) + 1); // 문자열 크기만큼 메모리 할당
if (str == NULL) {
printf("메모리 할당 실패\n");
return 1;
}
strcpy(str, input); // 문자열 복사
printf("동적 메모리에 저장된 문자열: %s\n", str);
free(str); // 메모리 해제
return 0;
}
출력 결과:
동적 메모리에 저장된 문자열: Dynamic Memory
13.6 심화 예제
1. 문자열 뒤집기
#include <stdio.h>
#include <string.h>
void reverseString(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
int main(void) {
char str[] = "Hello, World!";
reverseString(str);
printf("뒤집힌 문자열: %s\n", str);
return 0;
}
출력 결과:
뒤집힌 문자열: !dlroW ,olleH
2. 문자열 내 단어 개수 세기
#include <stdio.h>
#include <string.h>
int countWords(const char *str) {
int count = 0;
const char *ptr = str;
while (*ptr) {
if (*ptr == ' ' || *ptr == '\n' || *ptr == '\t') {
count++;
}
ptr++;
}
return count + 1; // 마지막 단어 포함
}
int main(void) {
char str[] = "Count the number of words";
printf("단어 개수: %d\n", countWords(str));
return 0;
}
출력 결과:
단어 개수: 5
728x90
반응형
'Computer Science > C 언어' 카테고리의 다른 글
[C #17] 구조체(Structs), 공용체(Unions), 열거형(Enums) (0) | 2024.12.14 |
---|---|
[C #16] 문자열 입력 기본 함수와 상황별 선택 (3) | 2024.12.14 |
[C #14] 동적 메모리 할당 (Dynamic Memory Allocation) (0) | 2024.12.12 |
[C언어 13] 포인터와 배열 (Pointers and Arrays) (1) | 2024.12.11 |
[C #12] 포인터 (Pointers) (1) | 2024.12.10 |