我正在更换未在此范围内声明

Posted

技术标签:

【中文标题】我正在更换未在此范围内声明【英文标题】: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;

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

【问题讨论】:

函数替换声明在哪里? 您不需要使用两次srand。在程序开始时调用一次就足够了。 replace 在哪里定义?您是否尝试使用string::replace? (cplusplus.com/reference/string/string/replace) cplusplus.com/reference/string/string/replace 仔细阅读该文档。也看看at this one。 【参考方案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 不是该函数的好名字。

以上是关于我正在更换未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章

未在此范围内声明 CvSVM 错误

错误:未在此范围内声明“对象”

glClearBufferfv - 未在此范围内声明?

C++ 错误:未在此范围内声明类/对象

C++ Win API 函数'未在此范围内声明'

Arduino:错误:“abs”未在此范围内声明