| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 495 人关注过本帖
标题:字符串替换这里怎么理解
只看楼主 加入收藏
a861268448
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2014-9-15
结帖率:66.67%
收藏
已结贴  问题点数: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;
}

这里*pstr1 = 0;和return dest;这里看不懂
搜索更多相关主题的帖子: source 字符串 
2015-04-13 23:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
这段函数经过测试了吗

DO IT YOURSELF !
2015-04-14 08:28
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:5 
嗯,

这个 *pstr1 = 0; 是表示给这个 pstr1 指向的位置里的值置 0,是字符串操作的常用手段,用于将字符串收尾。

不仅在最后这个位置需要这样做,你这个函数在进入循环前,对这个变量也要置 0 处理,才能适应外部没有对 dest 初始化过的调用,否则函数会不能达到目的:

    char *pstr = source;
    char *pstr1 = dest;
    unsigned int i;

    *pstr1 = 0;  // <--- 这个位置,增加这一句
  
    for (i=0;i<strlen(source)-strlen(substr1)+1;i++)  


这个函数名是 SwapSubstr(),函数名称含有交换的意思,但这个函数实际上只做了替换工作。因此,我觉得函数名称值得再商榷。
2015-04-14 09:16
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:0 
return dest 这句,你应该已经发现,代码在循环中,一直在操作 deat 的一个引用:pstr1。

pstr1 承担的任务是不断顺着 dest 的内存方向,把需要替换的部分拷贝到 dest,而真正指向dest首地址的指针一直由dest保存着没有改变,因此 pstr1只是我们用于操作运算的中间变量,真正的内容实际上存放在 pstr1 开始指向的那个 dest 里。所以,最后返回的目标,应该就是 dest。

另外,由于这个 dest 还是一个函数的输入参数,因此,这个函数即便不返回任何值,结果总是保存在输入参数 dest 里的。
2015-04-14 09:21
快速回复:字符串替换这里怎么理解
数据加载中...
 
   



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

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