strcmp() 사용하기
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 18번째.
strcat()를 사용하여 문자열을 연결하는 방법을 배웠지만, 두 문자열이 정확히 동일한 텍스트를 포함하고 있는지 확인해야 한다면 어떻게 해야 할까요? C 언어에서는 동등 연산자(==)를 사용하여 문자열을 비교할 수 없습니다. 왜냐하면 이 연산자는 실제 내용이 아니라 메모리 주소만을 비교하기 때문입니다.
<string.h> 라이브러리의 strcmp() 함수는 두 문자열을 한 문자씩 비교하여 이 문제를 해결합니다. 이 함수는 소위 사전식 비교(lexicographical comparison)를 수행하며, 이는 기본적으로 문자열을 사전 순서대로 비교하는 것을 의미합니다.
#include <stdio.h>
#include <string.h>
char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2); // 0을 반환합니다 (두 문자열이 같음)strcmp() 함수는 세 가지 다른 유형의 값을 반환합니다. 두 문자열이 동일하면 0을 반환하고, 첫 번째 문자열이 알파벳순으로 두 번째 문자열보다 앞에 오면 음수 값을, 첫 번째 문자열이 알파벳순으로 두 번째 문자열보다 뒤에 오면 양수 값을 반환합니다.
이 함수는 사용자 입력 유효성 검사, 텍스트 데이터 정렬 또는 프로그램의 검색 기능 구현과 같이 문자열 내용을 기반으로 결정을 내리는 데 필수적입니다.
챌린지
쉬움strcmp() 함수를 사용하여 간단한 비밀번호 확인 시스템을 구현하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 처리할 로그인 시도 횟수를 나타내는 정수
n을 읽습니다. - 각 로그인 시도에 대해:
- 입력으로부터 사용자 이름(username)을 읽습니다.
- 입력으로부터 비밀번호(password)를 읽습니다.
strcmp()를 사용하여 사용자 이름을 "admin"과 비교합니다.strcmp()를 사용하여 비밀번호를 "secret123"과 비교합니다.- 비교 결과에 따라 적절한 메시지를 출력합니다.
- 모든 시도를 처리한 후, 성공적인 로그인이 몇 번 발생했는지 세고 표시합니다.
로그인 유효성 검사 로직은 다음과 같아야 합니다:
- 사용자 이름과 비밀번호가 모두 일치하는 경우: "Login successful"을 출력합니다.
- 사용자 이름은 맞지만 비밀번호가 틀린 경우: "Invalid password"를 출력합니다.
- 사용자 이름은 틀리지만 비밀번호가 맞는 경우: "Invalid username"를 출력합니다.
- 사용자 이름과 비밀번호가 모두 틀린 경우: "Invalid credentials"를 출력합니다.
strcmp() 함수를 사용하기 위해 <string.h> 헤더를 포함하는 것을 잊지 마세요.
출력은 다음 형식을 따라야 합니다:
[Login result message]
[Login result message]
...
Total successful logins: [count]예를 들어, 입력이 다음과 같다면:
4
admin
secret123
user
password
admin
wrong
guest
secret123출력은 다음과 같아야 합니다:
Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1이 챌린지는 문자열의 일치 여부를 비교하기 위해 strcmp()를 사용하는 방법, 문자열 비교 결과에 따른 조건부 로직 구현, 그리고 비교 결과에 따른 발생 횟수 카운팅에 대한 이해도를 테스트합니다.
치트 시트
<string.h>의 strcmp() 함수는 사전식 비교를 사용하여 두 문자열을 한 글자씩 비교합니다:
#include <string.h>
char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);strcmp()는 다음을 반환합니다:
- 문자열이 동일하면
0 - 첫 번째 문자열이 알파벳순으로 두 번째 문자열보다 앞에 오면 음수 값
- 첫 번째 문자열이 알파벳순으로 두 번째 문자열보다 뒤에 오면 양수 값
C 언어에서는 ==를 사용하여 문자열을 비교할 수 없습니다. 이는 내용이 아닌 메모리 주소만 비교하기 때문입니다.
직접 해보기
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char username[100];
char password[100];
int successful_logins = 0;
// TODO: 여기에 코드를 작성하세요
// strcmp() 함수를 사용하여 각 로그인 시도를 처리하세요
// username을 "admin"과 비교하고 password를 "secret123"과 비교하세요
// 적절한 메시지를 출력하고 성공적인 로그인 횟수를 계산하세요
printf("Total successful logins: %d\n", successful_logins);
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.