【问题标题】:I am getting replace was not declared in this scope我正在更换未在此范围内声明
【发布时间】:2014-08-14 15:47:47
【问题描述】:

这是我正在编写的用于切换字符串字符的函数,但我得到“在此范围内未声明替换”。

#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;
}

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

【问题讨论】:

标签: c++ string function


【解决方案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

【讨论】:

  • 以后表示代码时请用`代替斜体。
【解决方案2】:

没有提供足够的信息来正确回答这个问题,但我会尝试一下。

我假设的 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 会是一个更好的名字。

【讨论】:

  • 更容易做到std::swap(s[a], s[b]);,这提示您replace 不是该函数的好名字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2016-08-09
  • 2019-02-17
  • 2021-01-07
  • 2016-10-27
  • 2016-06-03
相关资源
最近更新 更多