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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.