/******************************************************************************************************
* @file name: :Mystrcmp
* @brief :模拟strcmp
* @author :wvjnuhhail@126.com
* @date :2024/06/24
* @version 1.0 :V1.0
* @property :暂无
* @note :None
* CopyRight (c) 2023-2024 wvjnuhhail@126.com All Right Reseverd
******************************************************************************************************/
#include <stdio.h>
#define STR_LEN 50
int Strcmp(char *s1, char *s2);
int Strcmp(char *s1, char *s2) // 注意如果s1和s2不相同则返回第一个不同的字符差 s2-s1
{
while (1)
{
if (*s1 != *s2) // 只能判断相不相等
{
return *s2 - *s1; // 返回不同的字符差
}
s1++; // adfwa
s2++; // adfwa
if (*s1 == '\0' || *s2 == '\0') // 判断是否到了字符串的末尾
{
break;
}
}
return *s2 - *s1; // 这行代码是上面的循环 循环到了字符串的末尾
}
int My_Strcmp_While(char *str_1, char *str_2)
{
// abc
// abcd
while (*str_1 != '\0' && *str_2 != '\0')
{
/* if(*(str_1++) != *(str_2++))
{
return *(str_1-1) - *(str_2-1); //
}*/
int reslut = *(str_1++) - *(str_2++);
if (reslut != 0)
{
return reslut;
}
}
// 第一次while的小括号里面判断 f 和 f
// 第一次进入while循环判断的是 f 和 f
// 第二次while小括号里面判断的是 s 和 g
// 第二次进入while循环判断的是 s 和 g
return *str_1 - *str_2;
// 0 - a
}
int My_Strcmp(char *str_1, char *str_2)
{
for (; *(str_1) != '\0' && *(str_2) != '\0'; str_1++, str_2++)
{
if (*str_1 != *str_2)
{
return *str_1 - *str_2;
}
}
return *str_1 - *str_2;
}
int main()
{
// 定义两个数组,存放字符串,后面封装一个函数用来比较他们相不相同
char s1[STR_LEN] = "fdajsfgjdswavfdas";
char s2[STR_LEN] = "fdajsfgjdswa";
int ret = Strcmp(s1, s2);
if (ret == 0)
{
printf("s1等于s2\n");
}
else if (ret > 0)
{
printf("s2 > s1+++%d\n", ret);
}
else
{
printf("s2 < s1+++%d\n", ret);
}
return 0;
}
![image](https://img2024.cnblogs.com/blog/3432073/202406/3432073-20240624201331569-275201176.png)