使用 strcmp()
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 18 课,共 63 课。
你已经学会了如何使用 strcat() 拼接字符串,但如果你需要判断两个字符串是否包含完全相同的文本,该怎么办?在 C 中,你不能使用相等运算符(==)比较字符串,因为它只会比较内存地址,而不是实际内容。
strcmp() 函数来自 <string.h> 库,它通过逐个字符比较两个字符串来解决这个问题。这种比较称为字典序比较,本质上就是按照字典顺序比较字符串。
#include <stdio.h>
#include <string.h>
char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2); // 返回 0(字符串相等)strcmp() 函数会返回三种不同类型的值:如果两个字符串相同,则返回 0;如果第一个字符串按字母顺序排在第二个字符串之前,则返回负值;如果第一个字符串按字母顺序排在第二个字符串之后,则返回正值。
这个函数对于根据字符串内容做出决策至关重要,例如验证用户输入、对文本数据进行排序,或在程序中实现搜索功能。
挑战
简单编写一个 C 程序,使用 strcmp() 函数实现简单的密码验证系统。你的程序应该:
- 读取一个整数
n,表示要处理的登录尝试次数 - 对每次登录尝试:
- 从输入中读取用户名
- 从输入中读取密码
- 使用
strcmp()将用户名与 "admin" 进行比较 - 使用
strcmp()将密码与 "secret123" 进行比较 - 根据比较结果打印相应的消息
- 处理完所有尝试后,统计并显示成功登录的次数
登录验证逻辑应为:
- 如果用户名和密码都正确:打印 "Login successful"
- 如果用户名正确但密码错误:打印 "Invalid password"
- 如果用户名错误但密码正确:打印 "Invalid username"
- 如果用户名和密码都错误:打印 "Invalid credentials"
记得包含 <string.h> 头文件,以便使用 strcmp() 函数。
你的输出应按以下格式显示结果:
[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() 比较字符串是否相等、根据字符串比较结果实现条件逻辑,以及根据比较结果统计出现次数。
亲手试试
#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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器