프로그래밍에서는 두 문자열이 같은지 비교해야 할 때가 자주 있습니다.
예를 들어 아이디가 "admin"인지 확인하거나, "yes" 또는 "no" 같은 선택지를 검사할 때 말이죠.
C언어에서는 문자열을 단순히 a == b 처럼 비교할 수 없습니다.
그 대신 strcmp 함수를 사용해야 합니다.
● strcmp 함수 사용법
#include <string.h>
strcmp(문자열1, 문자열2);
두 문자열이 같으면 0을 반환하고,
다르면 음수 또는 양수를 반환합니다.
● 예시 코드
char a[] = "apple";
char b[] = "apple";
if (strcmp(a, b) == 0) {
printf("같습니다!\n");
}
두 문자열이 완전히 같기 때문에 strcmp 결과는 0이 됩니다.
● 비교 결과 해석
- 0: 두 문자열이 같다
- < 0: 문자열1 < 문자열2
- > 0: 문자열1 > 문자열2
문자의 아스키 코드 값을 기준으로 비교하므로, 대소문자도 구분합니다.
● 주의할 점
- 단순히 a == b처럼 비교하면 주소 비교이므로 잘못된 결과가 나옵니다.
- 대소문자를 무시하고 비교하려면 strcasecmp (또는 stricmp) 같은 함수를 사용해야 합니다.
strcmp는 문자열이 정확히 일치하는지를 검사할 때 필수적으로 사용됩니다.
로그인, 조건 분기, 메뉴 선택 등 다양한 상황에서 자주 활용되니 꼭 익혀두세요.
● 실습 문제
문제 1
"apple"과 "apple"을 비교했을 때의 strcmp 결과는?
문제 2
"cat"과 "dog"를 비교하면 어떤 값이 반환되나요?
문제 3
사용자로부터 입력받은 문자열이 "admin"인지 확인하는 코드를 작성하세요.
문제 4
strcmp를 사용하지 않고 문자열을 == 연산자로 비교하면 어떤 문제가 생기나요?
문제 5
"Zoo"와 "apple" 중 어떤 문자열이 더 앞서는지 비교해보세요.
▶ 정답 확인하기
정답 1
0 (같은 문자열이므로)
정답 2
음수 (c는 d보다 아스키 코드가 작으므로)
정답 3
char input[20];
scanf("%s", input);
if (strcmp(input, "admin") == 0) {
printf("관리자 로그인입니다.\n");
}
정답 4
== 연산자는 문자열의 내용을 비교하지 않고, 주소(메모리 위치)를 비교하기 때문에 예상한 결과가 나오지 않습니다.
정답 5
"Zoo"가 더 앞에 있는 것으로 나올 수 있지만, 실제로는 아스키 코드 기준으로 소문자가 대문자보다 큽니다.
따라서 strcmp("Zoo", "apple")는 음수를 반환하며 "Zoo"가 더 작다고 판단됩니다.
'프로그래밍언어 > C언어[초급]' 카테고리의 다른 글
[C언어][초급] Chapter51. 포인터 선언과 사용 – 다양한 자료형의 포인터 활용하기 (0) | 2025.04.19 |
---|---|
[C언어][초급] Chapter50. 포인터란? – 메모리 주소를 다루는 핵심 개념 (0) | 2025.04.19 |
[C언어][초급] Chapter48. 문자열 함수 – strcat 함수로 문자열 이어 붙이기 (0) | 2025.04.19 |
[C언어][초급] Chapter47. 문자열 함수 – strcpy 함수로 문자열 복사하기 (0) | 2025.04.19 |
[C언어][초급] Chapter46. 문자열 함수 – strlen 함수로 문자열 길이 재기 (1) | 2025.04.18 |