- 论坛徽章:
- 0
|
【原创】超强版 Trim 横空出世!
flw老兄的代码写得非常好,我是绝对写不出来的,在这个问题上,我只发表过一次代码,而且效率不高,剩下的帖子,倒像个批评家。
不过,这次我还是想做一次批评家,请大家不要介意。
1。如果该字符串前部没有空格(或空格串),只有尾部有,那么,if ( tail )这个条件判断就要进行O(n)次,这完全可以用分情况的办法解决,当然,大家会说,如果分情况的话,源代码就不会这么简洁了,那么*copied++ = *str出现过两次,也不简洁,但是效率比提到条件语句外稍高一点。
2。在《如何又简洁又安全地去掉字符串前面和后面的空符号?》中,大家降低时间复杂性的方法是在到达字符串结尾后又折回来。flw兄的是利用了tail变量来记住应该赋'\0'值的位置,但是这样一来,每次都要进行tail = copied; 赋值操作或者是if ( tail )比较+转跳操作,时间复杂性一下子加了一倍,在具有超流水线的机器中效率将会更低。
3。用strlen()或者memmove()的算法实际执行效率可能最高
大家可以试试用for循环来实现strlen()和memmove(),看看运行效率比它们低多少,稍微用心一点的strlen()等函数的实现都会用串处理指令,其运行效率,比用for循环高多了,但是高多少又无法像美国1787年宪法规定的“黑人人口按实际的四分之三折算”那样加以量化,因此是“可能”最高。
请大家多对我的看法提宝贵意见。 |
|