微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c ++用char指针替换char指针的字符

如何解决c ++用char指针替换char指针的字符

我遇到了一个函数的问题,该函数应该用字符数组 text 替换给定字符数组 src 中的每个字符 c

首先我计算返回值的长度。然后我插入正确的字符。至少那是我尝试的。

问题是我在返回值处出现了意外行为。有时它只替换第一个匹配的字母。有时是替换每一个添加一个神秘字母。

char *myreplace(const char *src,char c,const char *text){
    int mylength=0;
    for(int i=0; src[i] != '\0'; i++){
        if(src[i] == c)
            for(int j=0; text[j] != '\0'; j++){
                ++mylength;
            }
        else
            ++mylength;
    }

    char *newtext=new char[mylength+1];

    int x=0;
    for(int i=0; src[i] != '\0'; i++){
        if(src[i] == c)
            for(int j=0; text[j] != '\0'; j++){
                newtext[i+x] = text[j];
                ++x;
            }
        else
            newtext[i+x]=src[i];

    }
    return newtext;
}

解决方法

当您用替换字符串替换一个字符时,实际上是双倍递增(ix),导致每个替换实例跳过一个字符并写入超过分配缓冲区的末尾.

让我们看一个例子:src 是“abc”,text 是“d”,而 ch 是“a”。

当我们替换第一个字符时,我们将 d 写入 newtext 并增加 x。下一次循环时,我们将第二个源字符 ('b') 写入 newtext[i+x],或者当它应该转到 newtext[2] 时写入 newtext[1]

最简单的解决方法是在复制替换字符串后将 x 减 1。

您也没有将终止符 '\0' 写入 newtext 字符串的末尾。 (在返回前添加 nexttext[x+i] = 0;。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。