strcmp已经写成这样了,头还是不满意...

tomljr 2011-09-15 07:57:05
//Strcmp
int
strcmp(char *pt1,char *pt2)
{
for(;*pt1||*pt2;++pt1,++pt2)
{
if(*pt1>*pt2)
return *pt1-*pt2;
if(*pt1<*pt2)
return *pt1-*pt2;
}
return 0;
}

还能写成多短?
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongwenjun 2011-09-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110801/14/d07519ec-559f-4bdb-ba88-d6102eb3a7d3.html

http://srgb.googlecode.com/files/VC2008_CRT_SRC.7z
http://srgb.googlecode.com/files/cplusplus-2010-12-10.chm

我也只是熟悉一点比较基础的
可以看一下基础的代码,找个相似的 模版 改一下就好了
全部自己重新想,肯定走很多歪路的
tomljr 2011-09-15
  • 打赏
  • 举报
回复
像大牛膜拜
zjxylc 2011-09-15
  • 打赏
  • 举报
回复
果然需要比较
hongwenjun 2011-09-15
  • 打赏
  • 举报
回复
只有经过比较才能看到差距。
你的函数比较中文时,回错误,因为没有有把中文转换成 无符号字符
中文会是负数,不能反应真实大小
turing-complete 2011-09-15
  • 打赏
  • 举报
回复
int strcmp (const char * src, const char * dst)
{
int ret = 0 ;

while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;

return( ret );
}
hongwenjun 2011-09-15
  • 打赏
  • 举报
回复
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;

你看下 for 里面比标准库都多两个if判断
for(;*pt1||*pt2;++pt1,++pt2)
{
if(*pt1>*pt2)
if(*pt1<*pt2)
}
strcmp 返回值 是 -1 0 1三个,你的函数没有处理
hongwenjun 2011-09-15
  • 打赏
  • 举报
回复
int mystrcmp ( const char * src, const char * dst )
{
int ret = 0 ;
// 比较 *src - *dst ,如果相等就 ret=0 ;
// !ret && *dst ,循环结束条件(*src不等于*dst),*dst 结束标志"/0'
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret ); //
}


自己找一下差距

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧