介绍
在本实验中,你将学习如何在 C 语言中创建和实现自定义的字符串比较函数。实验内容涵盖理解内置的 strcmp()
函数、使用条件语句实现字符串比较、处理不区分大小写的比较、执行多个字符串比较,以及在真实场景中应用字符串比较。通过本实验,你将对 C 编程中的字符串操作和比较技术有深入的理解。
在本实验中,你将学习如何在 C 语言中创建和实现自定义的字符串比较函数。实验内容涵盖理解内置的 strcmp()
函数、使用条件语句实现字符串比较、处理不区分大小写的比较、执行多个字符串比较,以及在真实场景中应用字符串比较。通过本实验,你将对 C 编程中的字符串操作和比较技术有深入的理解。
在这一步骤中,你将学习 C 语言中的 strcmp()
函数,该函数用于按字典顺序比较两个字符串。
~/project
目录下创建一个名为 string-compare.c
的新文件:cd ~/project
touch string-compare.c
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello";
char str2[] = "hello";
char str3[] = "world";
// 使用 strcmp() 比较字符串
int result1 = strcmp(str1, str2);
int result2 = strcmp(str1, str3);
printf("str1 和 str2 的比较结果: %d\n", result1);
printf("str1 和 str3 的比较结果: %d\n", result2);
return 0;
}
gcc string-compare.c -o string-compare
./string-compare
示例输出:
str1 和 str2 的比较结果: 0
str1 和 str3 的比较结果: -15
让我们分解 strcmp()
的工作原理:
该函数逐个字符比较字符串,直到找到差异或到达其中一个字符串的末尾。
在这一步骤中,你将学习如何结合 strcmp()
和条件语句,根据字符串比较结果做出决策。
~/project
目录下创建一个名为 string-compare-conditional.c
的新文件:cd ~/project
touch string-compare-conditional.c
#include <stdio.h>
#include <string.h>
int main() {
char username[50];
char password[50];
printf("请输入用户名: ");
scanf("%s", username);
printf("请输入密码: ");
scanf("%s", password);
// 使用 if-else 比较用户名和密码
if (strcmp(username, "admin") == 0) {
if (strcmp(password, "secret") == 0) {
printf("登录成功!\n");
} else {
printf("密码错误。\n");
}
} else {
printf("用户名无效。\n");
}
return 0;
}
gcc string-compare-conditional.c -o string-compare-conditional
./string-compare-conditional
示例交互:
请输入用户名: admin
请输入密码: secret
登录成功!
请输入用户名: user
请输入密码: wrongpass
用户名无效。
本示例的关键点:
strcmp()
用于 if
语句中检查字符串是否相等if-else
语句允许实现复杂的字符串比较逻辑在这一步骤中,你将学习如何使用 strcasecmp()
函数执行不区分大小写的字符串比较。
~/project
目录下创建一个名为 case-insensitive-compare.c
的新文件:cd ~/project
touch case-insensitive-compare.c
#include <stdio.h>
#include <string.h>
int main() {
char input[50];
printf("请输入颜色 (Red/red/GREEN/green): ");
scanf("%s", input);
// 不区分大小写的比较
if (strcasecmp(input, "red") == 0) {
printf("你输入的颜色是 RED。\n");
} else if (strcasecmp(input, "green") == 0) {
printf("你输入的颜色是 GREEN。\n");
} else if (strcasecmp(input, "blue") == 0) {
printf("你输入的颜色是 BLUE。\n");
} else {
printf("未知颜色。\n");
}
return 0;
}
-std=gnu99
标志):gcc case-insensitive-compare.c -o case-insensitive-compare
./case-insensitive-compare
示例交互:
请输入颜色 (Red/red/GREEN/green): RED
你输入的颜色是 RED。
请输入颜色 (Red/red/GREEN/green): green
你输入的颜色是 GREEN。
关于不区分大小写比较的关键点:
strcasecmp()
比较字符串时忽略大小写差异strcmp()
类似,但不区分大小写在这一步骤中,你将学习如何使用不同的比较技术执行多个字符串比较。
~/project
目录下创建一个名为 multiple-string-compare.c
的新文件:cd ~/project
touch multiple-string-compare.c
#include <stdio.h>
#include <string.h>
int main() {
char input[3][50];
int comparison_count = 0;
// 输入三个字符串
for (int i = 0; i < 3; i++) {
printf("输入字符串 %d: ", i + 1);
scanf("%s", input[i]);
}
// 比较前两个字符串
if (strcmp(input[0], input[1]) == 0) {
printf("前两个字符串相同。\n");
comparison_count++;
}
// 比较后两个字符串
if (strcmp(input[1], input[2]) == 0) {
printf("后两个字符串相同。\n");
comparison_count++;
}
// 比较第一个和最后一个字符串
if (strcmp(input[0], input[2]) == 0) {
printf("第一个和最后一个字符串相同。\n");
comparison_count++;
}
// 总体比较总结
printf("匹配的字符串对数: %d\n", comparison_count);
return 0;
}
gcc multiple-string-compare.c -o multiple-string-compare
./multiple-string-compare
示例交互:
输入字符串 1: hello
输入字符串 2: world
输入字符串 3: hello
匹配的字符串对数: 1
关于多个字符串比较的关键点:
strcmp()
比较不同的字符串组合在这一步骤中,你将创建一个简单的密码管理系统,展示实用的字符串比较技术。
~/project
目录下创建一个名为 password-manager.c
的新文件:cd ~/project
touch password-manager.c
#include <stdio.h>
#include <string.h>
#define MAX_USERS 3
#define MAX_USERNAME 50
#define MAX_PASSWORD 50
// 用户结构体,用于存储凭证
struct User {
char username[MAX_USERNAME];
char password[MAX_PASSWORD];
char role[20];
};
int main() {
// 预定义的用户数据库
struct User users[MAX_USERS] = {
{"admin", "admin123", "administrator"},
{"manager", "manager456", "manager"},
{"user", "user789", "regular"}
};
char input_username[MAX_USERNAME];
char input_password[MAX_PASSWORD];
int login_success = 0;
printf("=== 简单密码管理系统 ===\n");
printf("请输入用户名: ");
scanf("%s", input_username);
printf("请输入密码: ");
scanf("%s", input_password);
// 使用字符串比较进行用户认证
for (int i = 0; i < MAX_USERS; i++) {
if (strcmp(users[i].username, input_username) == 0) {
if (strcmp(users[i].password, input_password) == 0) {
printf("登录成功!\n");
printf("角色: %s\n", users[i].role);
login_success = 1;
break;
}
}
}
if (!login_success) {
printf("登录失败。用户名或密码无效。\n");
}
return 0;
}
gcc password-manager.c -o password-manager
./password-manager
示例交互:
=== 简单密码管理系统 ===
请输入用户名: admin
请输入密码: admin123
登录成功!
角色: administrator
请输入用户名: user
请输入密码: wrongpassword
登录失败。用户名或密码无效。
关于此实际场景的关键点:
strcmp()
进行安全的凭证验证在本实验中,你学习了 C 语言中的 strcmp()
函数,该函数用于按字典顺序比较两个字符串。你使用 strcmp()
和条件语句实现了字符串比较,并根据比较结果做出决策。你还学习了如何处理不区分大小写的比较以及执行多个字符串比较。最后,你将字符串比较应用到了涉及用户认证的实际场景中。
本实验的关键学习点包括理解 strcmp()
函数、使用 if-else 语句实现字符串比较、处理不区分大小写的比较,以及在实践应用中应用字符串比较。