#include<stdio.h>
#include<stdlib.h>
int mystrcmp(const char* src, const char* dst)
{
int ret = 0;
while (!(ret = *(unsigned char*)src - *(unsigned char*)dst) && *dst)
{
//循环条件就是字符ASCll码相等同时dst字符串没有到末尾
++src;
++dst;
}
if (ret < 0)
{
ret = -1;
}
else if (ret>0)
{
ret = 1;
}
return ret;
}
void main()
{
char str[10] = "-1234352";
char str1[10] = "-2233434";
int i = mystrcmp(str, str1);
printf("%d", i);
system("pause");
}
/*对于超过127的字符在使用上面的函数时(默认上代码中实际也都是这么处理的)将该字符串视为符号(signed)的字符串
,所以超过127的字符或按照对应的2进制补码转换为对应的负数,从而产生上面错误的结果。如¥所存的值为190-256=-66,
-66<97,所以程序判断¥<a,返回-1。所以在处理时应该统一将其转换为对应的无符号型,
下面代码参考微软VC6.0中对应的strcmp部分代码,正是进行了这种转换:*/
strcmp函数实现
最新推荐文章于 2022-12-12 19:55:43 发布