41 lines
1.9 KiB
C
41 lines
1.9 KiB
C
// 设计函数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;
|
||
}
|