qfedu-c-level/day8/homework/h10.c

41 lines
1.9 KiB
C
Raw Normal View History

// 设计函数my_strcmp(char *str1, char *str2) ,返回两个字符串匹配的结果。
// 【提示】相同返回0str1大于str2返回1str2大于str1返回 - 1
#include <stdio.h>
int my_strcmp(char *str1, char *str2);
int main(void)
{
char str1[] = "hello w";
char str2[] = "hello s";
printf("result = %d\n", my_strcmp(str1, str2)); // 0
return 0;
}
int my_strcmp(char *str1, char *str2)
{
// 字符大小比较,使用 ASCII 码,例如:'a' > 'A''b' > 'a'
// 字符串比较大小的规则:从第一个字符开始比较,如果相同则比较下一个字符,直到有一个字符串到达末尾
// 当一个字符串到达末尾时,如果另一个字符串还有字符,则另一个字符串大
// 如果两个字符串都到达末尾,则两个字符串相同
// 例如str1 = "hello world"str2 = "hello"str1 > str2
// 相同字符长度的字符串比较大小比较的是字符串的字典序例如str1 = "hello"str2 = "world"str1 < str2 (h < w)
// 第一个字符串大于第二个字符串,返回 1
while (*str1 && *str2) // 理解为:当 str1 和 str2 都不为 0 时,表示两个字符串都没有到达末尾
{
if (*str1 > *str2) // 如果 str1 大于 str2
return 1; // 返回 1
else if (*str1 < *str2) // 如果 str1 小于 str2
return -1; // 返回 -1
str1++; // 指针向后移动一个字节
str2++; // 指针向后移动一个字节
}
// 如果 str1 和 str2 都到达了字符串的末尾,表示两个字符串相同
if (!*str1 && *str2 == 0) // !*str1 相当于 *str1 == 0
return 0;
if (*str1 == 0) // 如果 str1 到达了字符串的末尾,表示 str2 大于 str1
return -1;
if (*str2 == 0) // 如果 str2 到达了字符串的末尾,表示 str1 大于 str2
return 1;
}