0

我正在尝试编写一个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

4

3 回答 3

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;    
}
于 2013-09-02T15:29:32.933 回答
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)。

于 2013-09-02T15:39:18.443 回答
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;
}
于 2013-09-02T15:25:27.270 回答