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;
|
|||
|
}
|