C ++: - 用另一个字符串替换一段字符串

时间:2013-09-02 15:20:47

标签: c++ string data-structures replace

我正在尝试编写一个REPLACE函数,用given字符串替换required字符串。当我在纸上干燥运行该功能时,一切似乎都很好,但在执行时,它没有给出正确的输出。代码如下: -

string REPLACE(string src,string reqd,string given)
{
    int i,j,k;
    int pos = FIND(src,given);
    if(pos==-1)
        return "";
    else
    {
        char *arr = new char[src.length()+reqd.length()-given.length()];  // creating the array that will hold the modified string
        for(i=0;i<pos;i++)
            arr[i] = src[i];     // copying the initial part of the string
        for(i=pos,j=0;i<pos+reqd.length()+1&&j<reqd.length();i++,j++)
            arr[i] = reqd[j];    // copying the required string into array
        for(i=pos+reqd.length()+1,k=0;i<sizeof(arr);i++,k++)
            arr[i] = src[pos+given.length()+k];   // copying the remaining part of source string into the array
        return arr;
    }   
}

此处FIND也是由我编写的,并且在很多情况下已经过测试。我在FIND中没有看到任何错误。

3 个答案:

答案 0 :(得分:1)

我认为将std :: string与char数组混合不是一个好主意。以下应该工作:

string REPLACE(string src,string reqd,string given)
{
    int pos = FIND(src,given);

    src.replace( pos, given.size(), reqd );
    return src;    
}

答案 1 :(得分:1)

for(i=pos+reqd.length()+1,k=0; i<sizeof(arr); i++,k++)
//                               ^^^^^^^^^^^
//                           This is always the same

sizeof(arr)与编译时常量值sizeof(char*)相同。您需要自己保留动态分配的数组的大小(或者更好的是,只需使用std::string)。

答案 2 :(得分:0)

假设您不想重新发明轮子:

string REPLACE(string src,string reqd,string given)
{
    string str(src);
    size_t pos = str.find(given);
    if(pos == std::string::npos)
        return "";
    str.replace(pos, given.length(), reqd);
    return str;
}