这是我正在编写的一个函数,用于切换字符串的字符,但是我得到了#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;
}
显然我的功能有问题。任何帮助表示赞赏。
答案 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
会是一个更好的名字。