标题:字符串替换这里怎么理解
只看楼主
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: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册: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



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




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

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