티스토리 뷰

반응형

 

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> 함수로 문자열 조작 가능 (길이, 복사, 연결, 비교)

연습 문제 ✍️

  1. 문자열을 입력받아 길이를 출력하는 프로그램을 작성하세요.
  2. 두 문자열을 입력받아 이어 붙여 출력하세요.
  3. 두 문자열을 입력받아 같은지 비교하세요.
  4. 문자열 배열을 이용해 이름 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]) → 여러 문자열 저장 가능

 

반응형