在 C 语言中创建字符串比较函数

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何在 C 语言中创建和实现自定义的字符串比较函数。实验内容涵盖理解内置的 strcmp() 函数、使用条件语句实现字符串比较、处理不区分大小写的比较、执行多个字符串比较,以及在真实场景中应用字符串比较。通过本实验,你将对 C 编程中的字符串操作和比较技术有深入的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/CompoundTypesGroup(["`Compound Types`"]) c(("`C`")) -.-> c/FunctionsGroup(["`Functions`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/ControlFlowGroup -.-> c/if_else("`If...Else`") c/CompoundTypesGroup -.-> c/strings("`Strings`") c/FunctionsGroup -.-> c/function_declaration("`Function Declaration`") c/FunctionsGroup -.-> c/function_parameters("`Function Parameters`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/if_else -.-> lab-438244{{"`在 C 语言中创建字符串比较函数`"}} c/strings -.-> lab-438244{{"`在 C 语言中创建字符串比较函数`"}} c/function_declaration -.-> lab-438244{{"`在 C 语言中创建字符串比较函数`"}} c/function_parameters -.-> lab-438244{{"`在 C 语言中创建字符串比较函数`"}} c/user_input -.-> lab-438244{{"`在 C 语言中创建字符串比较函数`"}} c/output -.-> lab-438244{{"`在 C 语言中创建字符串比较函数`"}} end

理解 strcmp() 函数

在这一步骤中,你将学习 C 语言中的 strcmp() 函数,该函数用于按字典顺序比较两个字符串。

  1. ~/project 目录下创建一个名为 string-compare.c 的新文件:
cd ~/project
touch string-compare.c
  1. 在 WebIDE 中打开该文件并添加以下代码:
#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;
}
  1. 编译并运行程序:
gcc string-compare.c -o string-compare
./string-compare

示例输出:

str1 和 str2 的比较结果: 0
str1 和 str3 的比较结果: -15

让我们分解 strcmp() 的工作原理:

  • 如果字符串完全相同,则返回 0
  • 如果第一个字符串按字典顺序小于第二个字符串,则返回负值
  • 如果第一个字符串按字典顺序大于第二个字符串,则返回正值

该函数逐个字符比较字符串,直到找到差异或到达其中一个字符串的末尾。

使用 if-else 实现字符串比较

在这一步骤中,你将学习如何结合 strcmp() 和条件语句,根据字符串比较结果做出决策。

  1. ~/project 目录下创建一个名为 string-compare-conditional.c 的新文件:
cd ~/project
touch string-compare-conditional.c
  1. 在 WebIDE 中打开该文件并添加以下代码:
#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;
}
  1. 编译并运行程序:
gcc string-compare-conditional.c -o string-compare-conditional
./string-compare-conditional

示例交互:

请输入用户名: admin
请输入密码: secret
登录成功!

请输入用户名: user
请输入密码: wrongpass
用户名无效。

本示例的关键点:

  • strcmp() 用于 if 语句中检查字符串是否相等
  • 当字符串完全匹配时,函数返回 0
  • 嵌套的 if-else 语句允许实现复杂的字符串比较逻辑

处理不区分大小写的比较

在这一步骤中,你将学习如何使用 strcasecmp() 函数执行不区分大小写的字符串比较。

  1. ~/project 目录下创建一个名为 case-insensitive-compare.c 的新文件:
cd ~/project
touch case-insensitive-compare.c
  1. 在 WebIDE 中打开该文件并添加以下代码:
#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;
}
  1. 编译程序(注意:可能需要使用 -std=gnu99 标志):
gcc case-insensitive-compare.c -o case-insensitive-compare
  1. 运行程序:
./case-insensitive-compare

示例交互:

请输入颜色 (Red/red/GREEN/green): RED
你输入的颜色是 RED。

请输入颜色 (Red/red/GREEN/green): green
你输入的颜色是 GREEN。

关于不区分大小写比较的关键点:

  • strcasecmp() 比较字符串时忽略大小写差异
  • 它的工作方式与 strcmp() 类似,但不区分大小写
  • 适用于用户输入中大小写无关的场景

执行多个字符串比较

在这一步骤中,你将学习如何使用不同的比较技术执行多个字符串比较。

  1. ~/project 目录下创建一个名为 multiple-string-compare.c 的新文件:
cd ~/project
touch multiple-string-compare.c
  1. 在 WebIDE 中打开该文件并添加以下代码:
#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;
}
  1. 编译程序:
gcc multiple-string-compare.c -o multiple-string-compare
  1. 运行程序:
./multiple-string-compare

示例交互:

输入字符串 1: hello
输入字符串 2: world
输入字符串 3: hello
匹配的字符串对数: 1

关于多个字符串比较的关键点:

  • 使用 strcmp() 比较不同的字符串组合
  • 跟踪匹配的字符串对数
  • 展示灵活的字符串比较逻辑

在实际场景中应用字符串比较

在这一步骤中,你将创建一个简单的密码管理系统,展示实用的字符串比较技术。

  1. ~/project 目录下创建一个名为 password-manager.c 的新文件:
cd ~/project
touch password-manager.c
  1. 在 WebIDE 中打开该文件并添加以下代码:
#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;
}
  1. 编译程序:
gcc password-manager.c -o password-manager
  1. 运行程序:
./password-manager

示例交互:

=== 简单密码管理系统 ===
请输入用户名: admin
请输入密码: admin123
登录成功!
角色: administrator

请输入用户名: user
请输入密码: wrongpassword
登录失败。用户名或密码无效。

关于此实际场景的关键点:

  • 使用 strcmp() 进行安全的凭证验证
  • 展示字符串比较的实际应用
  • 实现一个简单的认证系统
  • 展示如何比较多个用户凭证

总结

在本实验中,你学习了 C 语言中的 strcmp() 函数,该函数用于按字典顺序比较两个字符串。你使用 strcmp() 和条件语句实现了字符串比较,并根据比较结果做出决策。你还学习了如何处理不区分大小写的比较以及执行多个字符串比较。最后,你将字符串比较应用到了涉及用户认证的实际场景中。

本实验的关键学习点包括理解 strcmp() 函数、使用 if-else 语句实现字符串比较、处理不区分大小写的比较,以及在实践应用中应用字符串比较。

您可能感兴趣的其他 C 教程