免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw
打印 上一主题 下一主题

【原创】超强版 Trim 横空出世! [复制链接]

论坛徽章:
0
51 [报告]
发表于 2004-03-05 20:01 |只看该作者

【原创】超强版 Trim 横空出世!

与本贴相关的连接:

http://www.chinaunix.net/jh/23/230114.html
http://bbs.chinaunix.net/forum/23/20040305/274341.html
http://bbs.chinaunix.net/forum/23/20040309/277036.html
http://bbs.chinaunix.net/forum/23/20040516/326132.html

论坛徽章:
0
52 [报告]
发表于 2004-03-07 16:33 |只看该作者

【原创】超强版 Trim 横空出世!

原帖由 "FH" 发表:

还有潜力的,不要一个字节一个字节地复制,记下首尾位置,用memcpy一次复制。


看了man里的说明,说当目的和源内存空间有重叠的时候,应该用 memmove ,memcpy 用于没有重叠的情况。可是试了试即使重叠的时候,用 memcpy 也行。真是困惑呀。

论坛徽章:
0
53 [报告]
发表于 2004-05-21 13:36 |只看该作者

【原创】超强版 Trim 横空出世!

不赞成这种写法。
——虽然少了循环,但循环内加入if分支,对效率又无益了。
不如直白些:

  1. char *trim(char *s)
  2. {
  3.         char *p,*q;
  4.         for(p=s;*p==' '||*p=='\t';++p);
  5.         for(q=s;*q++=*p++;);
  6.         for(;*(q-1)==' '||*(q-1)=='\t';--q);
  7.         *q=0;
  8.         return s;
  9. }
复制代码

论坛徽章:
0
54 [报告]
发表于 2004-05-21 13:41 |只看该作者

【原创】超强版 Trim 横空出世!

哈,还浮上来,又刮台风了。

原帖由 "whyglinux" 发表:


看了man里的说明,说当目的和源内存空间有重叠的时候,应该用 memmove ,memcpy 用于没有重叠的情况。可是试了试即使重叠的时候,用 memcpy 也行。真是困惑呀。




重叠的时候,是否能用 memcpy 取决于 copy 的方向。如果从低地址向高地址copy,就完蛋了。你可以再试一次。

论坛徽章:
0
55 [报告]
发表于 2004-05-21 13:43 |只看该作者

【原创】超强版 Trim 横空出世!

或者免拷贝:

  1. char *trim2(char *s)
  2. {
  3.         char *p,*q;
  4.         for(;*s==' '||*s=='\t';++s);
  5.         if(*s==0)
  6.                 return s;
  7.         for(p=s;*p;++p);
  8.         for(--p;*p==' '||*p=='\t';--p);
  9.         *(++p)=0;
  10.         return s;
  11. }
复制代码

论坛徽章:
0
56 [报告]
发表于 2004-05-21 14:55 |只看该作者

【原创】超强版 Trim 横空出世!

斑竹,评个好的,俺也偷懒下,把它入库吧.呵呵.

论坛徽章:
0
57 [报告]
发表于 2004-05-25 14:31 |只看该作者

【原创】超强版 Trim 横空出世!

奇怪,flw版主的程序我在windows下运行怎么报内存访问异常呢?

单步跟踪时发现是运行到
第一个
*copied++ = *str;

语句时报的,真是奇怪,难道是vc用的编译器的问题?

论坛徽章:
0
58 [报告]
发表于 2004-05-25 16:07 |只看该作者

【原创】超强版 Trim 横空出世!

我用
char *tmp="     hello     ";
trim(tmp);
程序Segmentation fault

论坛徽章:
0
59 [报告]
发表于 2004-05-25 16:18 |只看该作者

【原创】超强版 Trim 横空出世!

不错不错。这类程序在正确的前提下,效率第一,可读性第二。

论坛徽章:
0
60 [报告]
发表于 2004-05-27 10:11 |只看该作者

【原创】超强版 Trim 横空出世!

ret hat linux 下运行flw楼主的程序 Segmentation fault (core dumped)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP