标题:怎么写高效率的字符串处理函数
只看楼主
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
结帖率:72%
 问题点数:0 回复次数:15 
怎么写高效率的字符串处理函数
要实现字符串的库函数功能并不难,但要高效又简洁就要一定功力了。比如最简单的求长度函数
int StrLen(char *str)
{
}
怎么写会比较好呢,还有其他的,大家来试试吧。
搜索更多相关主题的帖子: 高效率 字符 函数 
2009-09-27 08:42
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
得分:0 
人的顿悟通常发生在最心痛的时刻,在沮丧和心痛之后,我作了深刻反省,“面壁”半年,重新温习软件设计的基础知识。补修“内功”之后,又觉得腰板硬了起来。博士毕业前半年,我曾到微软中国研究院找工作,接受微软公司一位资深软件工程师的面试。他让我写函数 strcpy 的代码。  
 
太容易了吧?  
 
错!  
 
这么一个小不点的函数,他从三个方面考查:  
 
( 1 )编程风格;  
 
( 2 )出错处理;  
 
( 3 )算法复杂度分析(用于提高性能)。  
 
在大学里从来没有人如此严格地考查过我的程序。我化了半个小时,修改了数次,他还不尽满意,让我回家好好琢磨。我精神抖擞地进“考场”,大汗淋漓地出“考场”。这“高手”当得也太窝囊了。我又好好地反省了一次。  
 
2009-09-27 08:51
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
回复 楼主 hwdwow
~~~~不会啊

我就是真命天子,顺我者生,逆我者死!
2009-09-27 09:09
atom_09
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:92
专家分:141
注 册:2009-8-24
得分:0 
2楼干吗抄袭别人的。。
2009-09-27 09:18
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
把要求提的那么高谁还给你写,我们又不是来面试的

既然说不是很难就自己写写呗,看看大家有什么改进意见不是更有益于学习~~
2009-09-27 09:50
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
得分:0 
我的理解:这个函数只要实现这一个功能就足够了,至于出错处理等功能,要由调用它的另外的函数来处理。
程序代码:
unsigned int my_strlen(char *str)
{
        unsigned int n=0;

        while(*str++)
        {
                ++n;
        }
    
        return n;
}


        呵呵,谢谢 pangding 指出我的错误,已经改正。


[ 本帖最后由 广陵绝唱 于 2009-9-27 12:07 编辑 ]
2009-09-27 10:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
返回值是 int,但定义的 n 是个 unsigned int 这么做可不太好哟~
收到的鲜花
  • 广陵绝唱2009-09-27 12:07 送鲜花  28朵   附言:谢谢。
2009-09-27 10:07
findugs
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-9-24
得分:0 
#include <stdio.h>
#include <wTypes.h>
 
int mystrlen(char *mystr)
{
    int sum=0;
    while(*mystr++ != '\0')
    {
        sum++;
    }  
    return sum;
}
 
int main (int argc, char *argv[])
{
    char *str="fghfgh";
     
    printf("mystrlen: %d",mystrlen(str));     
    return 0;
}


[ 本帖最后由 findugs 于 2009-9-27 11:17 编辑 ]
2009-09-27 11:14
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 
size_t __cdecl strlen (const char * str)
{
        const char *strpos = str;
 
        while( *strpos++ ) ;
 
        return( (size_t)(strpos - str - 1) );
}

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-27 11:31
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
得分:0 
楼上的厉害啊!一次循环只做一个++
2009-09-27 12:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-287045-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.363817 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved