免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
91 [报告]
发表于 2006-06-21 09:51 |只看该作者
挖坟的能力很强啊

论坛徽章:
0
92 [报告]
发表于 2006-06-21 17:45 |只看该作者
这种函数设计上就是错的:void trim(char* s)
应该是这样 char* trim(char* s)
似乎坛子里没人指出这一点,悲哀,大多数的中国程序员就是这么写程序的,还以为很高明。

论坛徽章:
0
93 [报告]
发表于 2006-06-21 21:36 |只看该作者
原帖由 liubinbj 于 2006-6-21 17:45 发表
这种函数设计上就是错的:void trim(char* s)
应该是这样 char* trim(char* s)
似乎坛子里没人指出这一点,悲哀,大多数的中国程序员就是这么写程序的,还以为很高明。


后一种定义用起来方便,但前一种也没有错啊?

论坛徽章:
0
94 [报告]
发表于 2006-06-22 15:57 |只看该作者
原帖由 FH 于 2006-6-21 21:36 发表


后一种定义用起来方便,但前一种也没有错啊?


语法是对的,设计是错的,那就是错的,你看看微软的大牛会这样定义trim吗?你觉得glibc会这么定义trim吗?严重误人子弟。

论坛徽章:
0
95 [报告]
发表于 2006-06-22 23:00 |只看该作者
原帖由 liubinbj 于 2006-6-22 15:57 发表


语法是对的,设计是错的,那就是错的,你看看微软的大牛会这样定义trim吗?你觉得glibc会这么定义trim吗?严重误人子弟。


char *的返回值用途广泛些,但是多了一个return也是开销啊!
侧重点不同罢了。

论坛徽章:
0
96 [报告]
发表于 2006-06-23 01:21 |只看该作者
这段代码不用太紧张吧

论坛徽章:
0
97 [报告]
发表于 2006-07-03 16:47 |只看该作者
这是我写的一个剔出前后空格的函数,优点就是没有进行内存的搬移,缺点是要引用函数的返回值,而且对传入参数的内存值有一处修改。
char * my_trim(const char *str)
{
        char *p_str;
        char * head;

        if(str == NULL)
                return NULL;
        head = NULL;

        for(p_str=str;*p_str;p_str++)
        {
                if(*p_str == ' ' || *p_str == '\t')
                        continue;
                else
                {
                        head = p_str;
                        break;
                }
        }

        for(p_str=head+strlen(head)-1;p_str >= head;p_str--)
        {
                if(*p_str == ' ' || *p_str == '\t')
                        continue;
                else
                {
                        *(p_str+1) = 0;
                        break;
                }
        }

        return head;

}

[ 本帖最后由 ccjjhua 于 2006-7-3 16:52 编辑 ]

论坛徽章:
0
98 [报告]
发表于 2006-07-03 16:49 |只看该作者
本着学习的态度,要了解一下高手们都是怎么想的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
99 [报告]
发表于 2009-03-13 16:04 |只看该作者
char *strim(char *str)
{
        char *p = str;
        if (NULL == p)
        {
                return NULL;
        }
        char *s = NULL;
        char *e = NULL;
        while(*p != '\0')
        {
                if (' ' == *p)
                {
                        if (NULL != s && NULL == e)
                        {
                                e = p;
                        }
                }
                else
                {
                        if (NULL == s)
                        {
                                s = p;
                        }
                        e = NULL;
                }
                ++p;
        }

        if (NULL != e)
        {
                *e = '\0';
        }
        return s;
}

清晰版

论坛徽章:
0
100 [报告]
发表于 2009-03-13 17:39 |只看该作者
好吧。我是十全十美。第100楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP