// 设计函数my_strcmp(char *str1, char *str2) ，返回两个字符串匹配的结果。
// 【提示】相同返回0，str1大于str2返回1，str2大于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;
}
