📜  C测验– 110 |问题5(1)

📅  最后修改于: 2023-12-03 14:40:26.305000             🧑  作者: Mango

C测验– 110 | 问题5

该测验题目是关于字符串的比较。在C语言中,字符串类型是以字符数组的形式表示的。通常情况下,我们使用字符串库函数来操作字符串,比如比较、复制、连接等等操作。但是在本题中,我们不使用库函数,而是手写字符串比较函数,即实现函数 my_strcmp(char* str1, char* str2),该函数的功能是比较两个字符串是否相等。

问题分析

比较两个字符串是否相等,本质上就是逐个比较两个字符串中每个字符是否相等。因此,我们可以使用循环结构遍历两个字符串的每个字符,将它们进行对比。

在进行字符串比较时,需要考虑以下几种情况:

  • 两个字符串的长度不同。如果两个字符串的长度不同,无论它们的前几个字符是否相等,最终的结果都会是不相等。

  • 某个字符串结束了而另一个字符串还没有结束。在这种情况下,我们不能再遍历未结束的字符串,否则会导致程序崩溃。因此,在比较字符串的过程中,需要判断字符串是否结束。

  • 某个字符不相等。在这种情况下,我们可以立刻判断出两个字符串不相等,并且不需要继续遍历。

代码实现
/*
 * my_strcmp - 用于比较两个字符串是否相等
 * @str1: 第一个字符串
 * @str2: 第二个字符串
 *
 * 返回值:
 * 如果两个字符串相等,返回0;
 * 如果str1 > str2,返回正数;
 * 如果str1 < str2,返回负数。
 */
int my_strcmp(char* str1, char* str2)
{
    int i = 0;
    while (str1[i] != '\0' && str2[i] != '\0') {
        if (str1[i] != str2[i]) {
            return str1[i] - str2[i];
        }
        i++;
    }
    return str1[i] - str2[i];
}
测试

我们来测试一下 my_strcmp 函数的正确性。

#include <stdio.h>

int my_strcmp(char* str1, char* str2);

int main()
{
    char str1[] = "hello";
    char str2[] = "world";
    char str3[] = "hello";
    printf("str1 和 str2 比较结果:%d\n", my_strcmp(str1, str2)); // 输出负数
    printf("str1 和 str3 比较结果:%d\n", my_strcmp(str1, str3)); // 输出0
    printf("str2 和 str3 比较结果:%d\n", my_strcmp(str2, str3)); // 输出正数
    return 0;
}

代码执行结果如下:

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

可以看到,我们编写的 my_strcmp 函数比较结果正确。