原帖由 "lenovo" 发表:
if ( str == NULL )
return NULL;
原型是返回void哦。
原帖由 "lenovo" 发表:
还有else
*copied = 0;
是否也可以去掉。
因为你for循环结束时的条件就是*copied == 0
还有应该是*str != 32 && *str != 9吧?
原帖由 "w25" 发表:
从那说起这个是超强的trim阿,它能去掉中间的空格,前面的空格,后面的空格,是全部还是部分阿。
还有,str!等于8或9有什么区别么?我看只要不等于32就算满足要求了!
原帖由 "w25" 发表:
从那说起这个是超强的trim阿,它能去掉中间的空格,前面的空格,后面的空格,是全部还是部分阿。
还有,str!等于8或9有什么区别么?我看只要不等于32就算满足要求了!
原帖由 "FH" 发表:
不错!
但我觉得应该把所有控制符都去掉,举个例子:BS也应该处理吧?而且处理起来还很复杂。STX,ACK等等有意义吗?
我都是判<=空格的,又干净效率还高。
原帖由 "flw"]还有一个观点需要说明,考虑到函数调用所需要的入栈、出栈的时间,所以我不习惯在循环中反复调用函数。就 isspace 而言,我虽然并不知道 isspace 内部是如何实现的(是不是又用了什么专用的指令?),但是直觉告诉我,isspace 并不会比直接比较的效率高。可能还会更低也说不定。[/quote 发表:
isspace 是一个宏, 确实要慢一些, 因为如 FH 兄所言:
[quote]
isspace的真值条件为:HT,VT,CR,LF,FF五个特殊字符。
原帖由 "guixin" 发表:
我觉得程序月简单越短越好,
重要的是维护成本低,可以很好的解决问题!
原帖由 "ii2004" 发表:
工具函数效率越高越好,不需要为读者多考虑,因为会去读它的人都是有能力去读它的。
应用程序越简单越好,易读性越高越好。不需要考虑代码效率,因为CPU会越来越快。
原帖由 "lenovo" 发表:
程序越短越容易理解吗?
不一定吧。
原帖由 "FH" 发表:
还有潜力的,不要一个字节一个字节地复制,记下首尾位置,用memcpy一次复制。
原帖由 "whyglinux" 发表:
看了man里的说明,说当目的和源内存空间有重叠的时候,应该用 memmove ,memcpy 用于没有重叠的情况。可是试了试即使重叠的时候,用 memcpy 也行。真是困惑呀。
原帖由 "db_info" 发表:
我用
char *tmp=" hello ";
trim(tmp);
程序Segmentation fault
原帖由 "hanni" 发表:
char *tmp=" hello ";
这是定义字符型指针变量并初始化,怎么是常量呢?
原帖由 "windflowers1976" 发表:
hello "; 就可以trim.
char *tmp = " hello"; 则是把tmp 的值赋为常量指针" hello " 的首地址.
不可以trim.
原帖由 "windflowers1976" 发表:
hello "; 就可以trim.
char *tmp = " hello"; 则是把tmp 的值赋为常量指针" hello " 的首地址.
不可以trim.
原帖由 "hanni" 发表:
char *tmp = " hello";是用初始化赋值的方法写成这样的.
含义是:把存放该字符串"hello"的字符数组的首地址装入指针变量tmp中 .
原帖由 "whyglinux" 发表:
char *tmp = " hello";这样的定义不是太确切
原帖由 xiaonanln 于 2006-3-19 08:11 发表
楼主的程序在复制每一个字符时都要做至少一个比较,我觉得性能应该不如先确定两头,然后复制中间的算法
原帖由 handsome-king 于 2006-3-22 20:00 发表
不知道我这个段代码怎么样:
trim( char *s )
{
char *p=s;
while (*p) p++;
while (p>s && ( (*(p-1)==' ') || *(p-1)=='\n' ) ) p--;
*p='\0';
}
原帖由 MackedNice 于 2006-6-20 21:39 发表
void trim2(char *str)
{
char *be, *end, *p;
int i = 1;
be = end = NULL;
for(p = str;*p;p++)
{
if(*p != ' ' && *p != '\t')
{
if(i ...
原帖由 MackedNice 于 2006-6-20 21:59 发表
谁说的。我测试过的。。
为什么这么说?
原帖由 liubinbj 于 2006-6-21 17:45 发表
这种函数设计上就是错的:void trim(char* s)
应该是这样 char* trim(char* s)
似乎坛子里没人指出这一点,悲哀,大多数的中国程序员就是这么写程序的,还以为很高明。
原帖由 FH 于 2006-6-21 21:36 发表
后一种定义用起来方便,但前一种也没有错啊?
原帖由 liubinbj 于 2006-6-22 15:57 发表
语法是对的,设计是错的,那就是错的,你看看微软的大牛会这样定义trim吗?你觉得glibc会这么定义trim吗?严重误人子弟。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |