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