我正在更换未在此范围内声明
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
不是该函数的好名字。以上是关于我正在更换未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章