📅  最后修改于: 2023-12-03 14:40:26.305000             🧑  作者: Mango
该测验题目是关于字符串的比较。在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
函数比较结果正确。