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

41 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 设计函数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;
}