C 언어 문자열 다루기: 정의, 조작 및 비교

CBeginner
지금 연습하기

소개

이 랩에서는 C 프로그래밍에서 문자열을 생성하고 조작하는 방법을 배우게 됩니다. 문자열을 정의하는 다양한 방법, printf를 사용하여 문자열을 형식화하는 방법, strlen을 사용하여 문자열 길이를 결정하는 방법, 그리고 strncmp를 사용하여 문자열을 비교하는 방법을 탐구할 것입니다. 이러한 기본적인 문자열 연산은 견고하고 유연한 C 애플리케이션을 구축하는 데 필수적입니다.

이 랩은 다음 단계를 다룹니다: 포인터 표기법을 사용하여 문자열 정의, 로컬 배열 표기법을 사용하여 문자열 정의, printf로 문자열 형식화, strlen으로 문자열 길이 결정, 그리고 strncmp로 문자열 비교. 이 랩을 마치면 C 에서 문자열을 다루는 데 대한 확실한 이해를 갖게 되며, 이러한 기술을 자신의 프로젝트에 적용할 수 있게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 92%의 긍정적인 리뷰율을 받았습니다.

포인터 표기법을 사용하여 문자열 정의하기

이 단계에서는 C 에서 포인터 표기법을 사용하여 문자열을 정의하는 방법을 배우게 됩니다. 포인터 표기법은 C 프로그래밍에서 문자열을 생성하고 조작하는 유연한 방법을 제공합니다.

먼저, 포인터 표기법으로 문자열 정의를 시연하기 위해 새 파일을 생성해 보겠습니다:

cd ~/project
touch string_pointer.c

이제 다음 코드를 입력합니다:

#include <stdio.h>

int main() {
    // 포인터 표기법을 사용하여 문자열 정의
    char *greeting = "Hello, C Programming!";

    // 문자열 출력
    printf("Greeting: %s\n", greeting);

    return 0;
}

프로그램을 컴파일하고 실행합니다:

gcc string_pointer.c -o string_pointer
./string_pointer

예시 출력:

Greeting: Hello, C Programming!

코드를 자세히 살펴보겠습니다:

  • char *greeting은 문자 (문자열) 에 대한 포인터를 선언합니다.
  • "Hello, C Programming!"은 메모리에 저장된 문자열 리터럴입니다.
  • 포인터 greeting은 문자열의 첫 번째 문자를 가리킵니다.
  • printf()%s 형식 지정자를 사용하여 전체 문자열을 출력합니다.

또한 포인터를 수정하여 문자열의 다른 부분을 가리키도록 할 수 있습니다:

#include <stdio.h>

int main() {
    char *greeting = "Hello, C Programming!";

    // 문자열의 특정 부분을 가리킴
    char *partial = greeting + 7;

    printf("Original string: %s\n", greeting);
    printf("Partial string: %s\n", partial);

    return 0;
}

예시 출력:

Original string: Hello, C Programming!
Partial string: C Programming!

로컬 배열 표기법을 사용하여 문자열 정의하기

이 단계에서는 C 에서 로컬 배열 표기법을 사용하여 문자열을 정의하는 방법을 배우게 됩니다. 이 방법은 문자 배열에 대한 더 직접적인 제어를 통해 문자열을 생성하고 초기화하는 또 다른 방법을 제공합니다.

로컬 배열 표기법을 사용하여 문자열 정의를 시연하기 위해 새 파일을 생성해 보겠습니다:

cd ~/project
touch string_array.c

다음 코드를 입력합니다:

#include <stdio.h>

int main() {
    // 로컬 배열 표기법을 사용하여 문자열 정의
    char greeting[30] = "Hello, C Programming!";

    // 문자열 출력
    printf("Greeting: %s\n", greeting);

    return 0;
}

프로그램을 컴파일하고 실행합니다:

gcc string_array.c -o string_array
./string_array

예시 출력:

Greeting: Hello, C Programming!

로컬 배열 표기법의 몇 가지 변형을 살펴보겠습니다:

#include <stdio.h>

int main() {
    // 명시적 초기화로 배열 정의
    char name[10] = {'J', 'o', 'h', 'n', '\0'};

    // 부분 초기화로 배열 정의
    char city[20] = "New York";

    // 크기를 지정하지 않고 배열 정의
    char message[] = "Welcome to C Programming!";

    printf("Name: %s\n", name);
    printf("City: %s\n", city);
    printf("Message: %s\n", message);

    return 0;
}

예시 출력:

Name: John
City: New York
Message: Welcome to C Programming!

로컬 배열 표기법에 대한 주요 사항:

  • 배열 크기를 명시적으로 지정할 수 있습니다.
  • '\0' (null terminator) 은 문자열의 끝을 표시하는 데 중요합니다.
  • 배열은 개별 문자 또는 문자열 리터럴로 초기화할 수 있습니다.
  • 완전히 초기화되지 않은 경우 나머지 요소는 0 으로 설정됩니다.

printf 함수를 사용하여 문자열 서식 지정하기

이 단계에서는 C 에서 printf()를 사용하여 문자열과 다양한 데이터 유형의 형식을 지정하는 방법을 배우게 됩니다. printf() 함수는 강력한 문자열 형식 지정 기능을 제공합니다.

문자열 형식 지정을 시연하기 위해 새 파일을 생성해 보겠습니다:

cd ~/project
touch string_formatting.c

다양한 형식 지정 옵션을 탐색하려면 다음 코드를 입력합니다:

#include <stdio.h>

int main() {
    // 기본 문자열 형식 지정
    char name[] = "Alice";
    int age = 30;
    float height = 5.8;

    // 간단한 문자열 출력
    printf("Name: %s\n", name);

    // 여러 변수를 사용한 형식 지정
    printf("Profile: %s is %d years old\n", name, age);

    // 부동 소수점 정밀도를 사용한 형식 지정
    printf("Height: %.1f meters\n", height);

    // 너비 및 정렬
    printf("Name (right-aligned): %10s\n", name);
    printf("Name (left-aligned):  %-10s\n", name);

    // 서로 다른 형식 지정자 혼합
    printf("Details: %s, %d years, %.1f meters\n", name, age, height);

    return 0;
}

프로그램을 컴파일하고 실행합니다:

gcc string_formatting.c -o string_formatting
./string_formatting

예시 출력:

Name: Alice
Profile: Alice is 30 years old
Height: 5.8 meters
Name (right-aligned):      Alice
Name (left-aligned): Alice
Details: Alice, 30 years, 5.8 meters

일반적인 형식 지정자:

  • %s: 문자열
  • %d: 정수
  • %f: 부동 소수점 숫자
  • %.1f: 소수점 1 자리 부동 소수점
  • %10s: 10 자 너비로 오른쪽 정렬
  • %-10s: 10 자 너비로 왼쪽 정렬

더욱 고급 형식 지정을 살펴보겠습니다:

#include <stdio.h>

int main() {
    // 16 진수 및 8 진수 표현
    int number = 255;
    printf("Decimal: %d\n", number);
    printf("Hexadecimal: %x\n", number);
    printf("Octal: %o\n", number);

    // 0 으로 채우기
    printf("Padded number: %05d\n", 42);

    return 0;
}

예시 출력:

Decimal: 255
Hexadecimal: ff
Octal: 377
Padded number: 00042

strlen 함수를 사용하여 문자열 길이 확인하기

이 단계에서는 C 에서 strlen() 함수를 사용하여 문자열의 길이를 결정하는 방법을 배우게 됩니다. strlen() 함수는 <string.h> 라이브러리의 일부이며 문자열의 문자를 쉽게 계산할 수 있는 방법을 제공합니다.

문자열 길이 계산을 시연하기 위해 새 파일을 생성해 보겠습니다:

cd ~/project
touch string_length.c

strlen()을 탐색하려면 다음 코드를 입력합니다:

#include <stdio.h>
#include <string.h>

int main() {
    // 서로 다른 길이의 문자열 정의
    char greeting[] = "Hello, World!";
    char name[] = "Alice";
    char empty[] = "";

    // 문자열 길이 계산 및 출력
    printf("Greeting: %s\n", greeting);
    printf("Greeting length: %lu characters\n", strlen(greeting));

    printf("Name: %s\n", name);
    printf("Name length: %lu characters\n", strlen(name));

    printf("Empty string length: %lu characters\n", strlen(empty));

    return 0;
}

프로그램을 컴파일하고 실행합니다:

gcc string_length.c -o string_length
./string_length

예시 출력:

Greeting: Hello, World!
Greeting length: 13 characters
Name: Alice
Name length: 5 characters
Empty string length: 0 characters

strlen()을 사용하는 더 실용적인 예제를 살펴보겠습니다:

#include <stdio.h>
#include <string.h>

int main() {
    char input[100];

    printf("Enter a string: ");
    fgets(input, sizeof(input), stdin);

    // 줄 바꿈 문자 제거 (if present)
    input[strcspn(input, "\n")] = 0;

    // 문자열 길이 계산 및 출력
    size_t length = strlen(input);

    printf("You entered: %s\n", input);
    printf("String length: %lu characters\n", length);

    // 길이 기반 연산 시연
    if (length > 10) {
        printf("This is a long string!\n");
    } else if (length > 0) {
        printf("This is a short string.\n");
    } else {
        printf("You entered an empty string.\n");
    }

    return 0;
}

strlen()에 대한 주요 사항:

  • null terminator 앞의 문자 수를 반환합니다.
  • null terminator 는 계산하지 않습니다.
  • 문자 배열 및 문자열 리터럴과 함께 작동합니다.
  • <string.h> 라이브러리의 일부이므로 이 헤더를 포함합니다.
  • size_t 유형 (unsigned long) 을 반환합니다.

strncmp 함수를 사용하여 문자열 비교하기

이 단계에서는 C 에서 strncmp() 함수를 사용하여 문자열을 비교하는 방법을 배우게 됩니다. strncmp() 함수를 사용하면 두 문자열 간의 지정된 수의 문자를 비교할 수 있습니다.

문자열 비교를 시연하기 위해 새 파일을 생성해 보겠습니다:

cd ~/project
touch string_compare.c

strncmp()를 탐색하려면 다음 코드를 입력합니다:

#include <stdio.h>
#include <string.h>

int main() {
    // 비교할 문자열 정의
    char str1[] = "Hello, World!";
    char str2[] = "Hello, Everyone!";
    char str3[] = "Hello, World!";

    // 전체 문자열 비교
    printf("Full string comparison:\n");
    int result1 = strncmp(str1, str2, strlen(str1));
    int result2 = strncmp(str1, str3, strlen(str1));

    printf("str1 vs str2: %d\n", result1);
    printf("str1 vs str3: %d\n", result2);

    // 처음 몇 글자 비교
    printf("\nPartial string comparison:\n");
    int result3 = strncmp(str1, str2, 7);
    printf("First 7 characters of str1 vs str2: %d\n", result3);

    return 0;
}

프로그램을 컴파일하고 실행합니다:

gcc string_compare.c -o string_compare
./string_compare

예시 출력:

Full string comparison:
str1 vs str2: -1
str1 vs str3: 0

Partial string comparison:
First 7 characters of str1 vs str2: 0

문자열 비교의 더 실용적인 예제를 만들어 보겠습니다:

#include <stdio.h>
#include <string.h>

int main() {
    // 비밀번호 확인 예시
    char stored_password[] = "SecretPass123";
    char input_password[20];

    printf("Enter password: ");
    scanf("%19s", input_password);

    // 비밀번호의 처음 10 글자 비교
    int comparison = strncmp(stored_password, input_password, 10);

    if (comparison == 0) {
        printf("Access granted!\n");
    } else {
        printf("Access denied!\n");
    }

    return 0;
}

strncmp()에 대한 주요 사항:

  • 지정된 수의 문자까지 비교합니다.
  • 지정된 길이만큼 문자열이 일치하면 0 을 반환합니다.
  • 첫 번째 문자열이 사전적으로 작으면 음수 값을 반환합니다.
  • 첫 번째 문자열이 사전적으로 크면 양수 값을 반환합니다.
  • <string.h> 라이브러리의 일부입니다.
  • 부분 문자열 비교에 유용합니다.

strncmp() 반환 값 이해:

  • 0: 지정된 길이만큼 문자열이 같습니다.
  • < 0: 첫 번째 문자열이 두 번째 문자열 앞에 옵니다.
  • 0: 첫 번째 문자열이 두 번째 문자열 뒤에 옵니다.

요약

이 랩에서는 C 프로그래밍에서 포인터 표기법과 로컬 배열 표기법을 사용하여 문자열을 정의하는 방법을 배웠습니다. 포인터 표기법을 사용하면 문자 포인터를 사용하여 문자열을 유연하게 생성하고 조작할 수 있습니다. 로컬 배열 표기법을 사용하면 문자 배열을 더 직접적으로 제어할 수 있습니다. 또한 printf()로 문자열을 형식화하고, strlen()으로 문자열 길이를 결정하고, strncmp()로 문자열을 비교하는 방법을 배웠습니다. 이러한 문자열 조작 기술은 C 에서 텍스트 데이터를 처리하기 위한 기본적인 기술입니다.