我在这个范围内没有宣布替换

时间:2014-08-14 15:47:48

标签: c++ string function

这是我正在编写的一个函数,用于切换字符串的字符,但是我得到了#34;替换未在此范围内声明"。

#include <string>

using namespace std;

string rs(string j)
{
    srand(time(NULL));

    int len = j.size();
    int ran1 = rand() % len;

    srand(time(NULL) + 1);

    int ran2 = rand() % len;

    replace(j, ran1, ran2);

    cout << j << endl;

    return j;
}

显然我的功能有问题。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

replace()string类的成员函数,这很可能是您收到错误的原因。

但是,replace()不会切换子串,只是将其替换为另一个。

如果要使用replace函数切换字符串的两个子字符串,可以尝试通过替换该行来实现:

replace(j, ran1, ran2);

string substr_at_ran1 = j.substr(ran1, 1);
j.replace(ran1, 1, j.substr(ran2, 1));
j.replace(ran2, 1, substr_at_ran1);

这是从位置j和长度ran1开始1的子字符串,位置j的子字符串为ran2,长度为{{1 }}

答案 1 :(得分:0)

没有提供足够的信息来正确回答这个问题,但我会采取措施。

我假设的replace()函数是一个函数,可能在你的程序中不存在,因为你没有提供它。

假设您希望函数rs()随机交换两个字符,这里有一个程序可以做到这一点。

#include <string>
#include <iostream>

using namespace std;

string rs(string j)
{
    auto len = j.size();

    if (len == 0) //added because your code didn't account for empty strings
    {
        return j;
    }

    auto ran1 = rand() % len;
    auto ran2 = rand() % len;

    swap(j[ran1], j[ran2]);

    cout << j << endl;

    return j;
}

int main()
{
    srand(time(NULL)); //do not use srand in modern C++!

    rs("stack overflow");
}

我还建议不要像rs那样创建函数名,因为它的功能不能单独从名称中收集。 swap_random_characters会是一个更好的名字。