Menu
CoddyTech

使用 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;如果第一个字符串按字母顺序排在第二个字符串之前,则返回负值;如果第一个字符串按字母顺序排在第二个字符串之后,则返回正值。

这个函数对于根据字符串内容做出决策至关重要,例如验证用户输入、对文本数据进行排序,或在程序中实现搜索功能。

challenge icon

挑战

简单

编写一个 C 程序,使用 strcmp() 函数实现简单的密码验证系统。你的程序应该:

  1. 读取一个整数 n,表示要处理的登录尝试次数
  2. 对每次登录尝试:
    • 从输入中读取用户名
    • 从输入中读取密码
    • 使用 strcmp() 将用户名与 "admin" 进行比较
    • 使用 strcmp() 将密码与 "secret123" 进行比较
    • 根据比较结果打印相应的消息
  3. 处理完所有尝试后,统计并显示成功登录的次数

登录验证逻辑应为:

  • 如果用户名和密码都正确:打印 "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;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器