| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1682 人关注过本帖
标题:字符串替换函数定义方式比较
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:10 回复次数:3 
字符串替换函数定义方式比较
程序代码:
方式一:
// 把字符串str中的子字符串substr1用子字符串substr2替换
char* SwapSubstr(char *dest, char *source, char*substr1, char*substr2)
{
    char *pstr = source;
    char *pstr1 = dest;
    unsigned int i;
  
    for (i=0;i<strlen(source)-strlen(substr1)+1;i++)
    {
        if (0==strncmp(pstr,substr1,strlen(substr1)))
        {
            strcat(pstr1,substr2);
            pstr += strlen(substr1);
            pstr1 += strlen(substr2);
        }
        else
            *pstr1++ = *pstr++;
    }
    *pstr1 = 0;
    return dest;
}
上述函数要求替换产生的目的存储器事先传入
程序代码:
// 方式二:
char* SwapSubstr(char *source, char*substr1, char*substr2)
{
    static char dest[1024];
    char *pstr = source;
    char *pstr1 = dest;
    unsigned int i;
  
    for (i=0;i<strlen(source)-strlen(substr1)+1;i++)
    {
        if (0==strncmp(pstr,substr1,strlen(substr1)))
        {
            strcat(pstr1,substr2);
            pstr += strlen(substr1);
            pstr1 += strlen(substr2);
        }
        else
            *pstr1++ = *pstr++;
    }
    *pstr1 = 0;
    return dest;
}
方式二则使用静态存储器的方式,不用预先制定目标存储器,但是这种方式的不利之处在于不可多线程并行处理
搜索更多相关主题的帖子: 函数 串替 定义 字符 
2010-07-02 21:44
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 2楼 BlueGuy
谢谢您对我的编程规范提出有意的看法

其实我是想说上面两种表示方法,那种比较好呢?我现在有点犹豫

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-02 22:16
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
二楼中的 for (i=0;i<srcLen - subLen;i++)是有效率

不过要改成for (i=0; i<srcLen - subLen + 1; i++)

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-02 23:55
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用你们都要疼我哦在2010-7-3 14:10:06的发言:

哎 效率不是靠想象的,你认为每循环一次,就都要去计算strlen(),这只是你的想当然。

实际上仅在进入时计算一次,然后strlen(source)-strlen(substr1)+1就以固定值出现了。
无端又引入srcLen subLen 这两个局部变量。。。其实其值相对来讲是常量,运行时还要分配栈空间,效率反而低。
也许你想的多一些,认为循环条件并非常量,认为他们是作为参数传入,在编译阶段无法确定,值并不固定,所以每次都要计算。 但实际进到函数内部 对于FOR来说,仅需计算一次,就是固定值。再长,也不会进行第2次计算。
可能比较不容易理解, 慢慢学多了就好了。
这个是看编译器的优化情况了吧?不同的编译器对此处理方法应该不一样吧

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-03 22:55
快速回复:字符串替换函数定义方式比较
数据加载中...
 
   



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

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