0Pricing
C Academy · 강의

strcmp와 비교

문자열을 비교합니다

strcmp와 비교은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

문자열 비교

C에서는 ==로 문자열을 비교할 수 없습니다. ==는 두 배열의 내용이 아니라 주소만 비교합니다.

<string.h>의 strcmp(a, b)를 사용해 문자 단위로 비교하세요.

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

int main(void) {
    char a[] = "apple";
    char b[] = "apple";
    if (strcmp(a, b) == 0)
        printf("Strings are equal\n");
    return 0;
}

strcmp의 반환값

strcmp는 int를 반환합니다.

  • 문자열이 같으면 0
  • a에서 처음으로 다른 문자가 b의 문자보다 작으면 음수
  • 그 외에는 양수
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("abc", "abc"));
    printf("%d\n", strcmp("abc", "abd"));
    printf("%d\n", strcmp("abd", "abc"));
    return 0;
}

0을 같음으로 판단할 때의 함정

흔히 발생하는 오류는 같다는 뜻으로 생각하고 if (strcmp(a, b))를 작성하는 것입니다.

문자열이 같을 때 strcmp는 0(거짓)을 반환하므로, 이 조건은 두 문자열이 다를 때 참이 됩니다. 항상 0과 명시적으로 비교하세요.

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

int main(void) {
    char input[] = "yes";
    if (strcmp(input, "yes") == 0)
        printf("Confirmed\n");
    else
        printf("Not confirmed\n");
    return 0;
}

비교가 작동하는 방식

strcmp는 문자의 ASCII(바이트) 값을 한 번에 하나씩 비교하며, 값이 다르거나 종결자에 도달할 때까지 계속합니다.

대문자(A=65)는 소문자(a=97)보다 먼저 오므로 "Zebra"가 "apple"보다 먼저 정렬됩니다.

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

int main(void) {
    printf("%d\n", strcmp("Zebra", "apple"));
    return 0;
}

사전식 정렬 순서

strcmp의 부호를 이용하면 문자열을 알파벳순으로 정렬할 수 있습니다. 음수 결과는 첫 번째 인자가 사전순으로 더 앞선다는 뜻입니다.

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

int main(void) {
    const char *x = "banana";
    const char *y = "cherry";
    if (strcmp(x, y) < 0)
        printf("%s comes before %s\n", x, y);
    return 0;
}

strncmp: 제한된 비교

strncmp(a, b, n)은 최대 n개의 문자를 비교합니다. 접두사를 확인할 때 유용합니다.

예를 들어 문자열이 "http"로 시작하는지 확인할 수 있습니다.

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

int main(void) {
    char url[] = "https://site.com";
    if (strncmp(url, "https", 5) == 0)
        printf("Secure URL\n");
    return 0;
}

대소문자를 구분하지 않는 비교

표준 strcmp는 대소문자를 구분합니다. 대소문자를 무시하려면 비교하는 동안 <ctype.h>의 tolower로 문자를 변환할 수 있습니다.

(POSIX 시스템은 strcasecmp도 제공하지만, 이는 C 표준에 포함되지 않습니다.)

#include <stdio.h>
#include <ctype.h>

int ci_cmp(const char *a, const char *b) {
    while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
    return tolower(*a) - tolower(*b);
}

int main(void) {
    printf("%d\n", ci_cmp("Hello", "hello"));
    return 0;
}

비교를 이용한 검색

문자열 배열을 순회하면서 strcmp를 사용해 일치하는 항목을 찾을 수 있습니다. 간단한 조회 테이블과 같은 방식입니다.

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

int main(void) {
    const char *fruits[] = {"apple", "banana", "cherry"};
    const char *target = "banana";
    for (int i = 0; i < 3; i++) {
        if (strcmp(fruits[i], target) == 0) {
            printf("Found at index %d\n", i);
        }
    }
    return 0;
}

문자열 정렬

strcmp를 비교 기준으로 사용하면 문자열 배열을 정렬할 수 있습니다. 다음은 순서에 따라 포인터를 교환하는 간단한 버블 정렬입니다.

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

int main(void) {
    const char *names[] = {"Carol", "Alice", "Bob"};
    int n = 3;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (strcmp(names[j], names[j+1]) > 0) {
                const char *t = names[j];
                names[j] = names[j+1];
                names[j+1] = t;
            }
    for (int i = 0; i < n; i++) printf("%s\n", names[i]);
    return 0;
}

뺄셈을 직접 사용해 비교하지 않기

a[i] - b[i]를 사용해 직접 비교 함수를 작성하고 싶을 수 있지만, 원시 char 값에서는 부호 처리 방식이 구현에 따라 다르고 오버플로가 발생할 수 있습니다.

이러한 예외 상황을 올바르게 처리하는 라이브러리 strcmp를 우선 사용하세요.

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

int main(void) {
    int r = strcmp("file1", "file2");
    printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
    return 0;
}

사용자 입력 비교

실제 사용 사례로는 비밀번호나 메뉴 선택을 확인하는 것이 있습니다. 입력을 읽은 다음 strcmp로 예상 값과 비교하세요.

같은지 확인하려면 항상 0과 비교하세요.

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

int main(void) {
    char choice[] = "quit";
    if (strcmp(choice, "quit") == 0)
        printf("Exiting program\n");
    return 0;
}

빠른 확인

strcmp의 반환값에 대한 이해도를 확인해 보세요.

복습

C에서 문자열을 비교하는 방법을 배웠습니다.

  • strcmp는 같으면 0을, 순서 비교 결과에 따라 음수 또는 양수를 반환합니다.
  • 문자열에 ==를 사용하지 마세요. 주소를 비교하기 때문입니다.
  • 같은지 확인할 때는 항상 == 0을 검사하세요(0은 거짓으로 취급되는 함정에 주의하세요).
  • strncmp는 접두사를 비교하며, 대소문자를 구분하지 않으려면 tolower가 필요합니다.

자주 묻는 질문

“strcmp와 비교” 강의는 무료인가요?

네 — “strcmp와 비교” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“strcmp와 비교”에서 뭘 배우나요?

문자열을 비교합니다 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“strcmp와 비교” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. strlen, strcpy, strcat
  2. strcmp와 비교
  3. strtok과 토큰화
  4. memcpy와 memset
← C Academy(으)로 돌아가기