我的主要功能包含一个我想混杂的字符串。我找到了一段代码,它传入char*
并在完成时返回0。我已经按照代码提供程序的说明简单地传入了你想要混乱的字符串。
#include <iostream>
#include <string.h>
#include <time.h>
using namespace std;
int scrambleString(char* str)
{
int x = strlen(str);
srand(time(NULL));
for(int y = x; y >=0; y--)
{
swap(str[rand()%x],str[y-1]);
}
return 0;
}
当我这样做时,我收到"no suitable conversion function "std::string" to "char*" exists
的错误。
我也试过传递const char*
,但这不允许我访问该词并进行更改。
答案 0 :(得分:7)
请改为尝试:
std::string s = "Hello";
std::random_shuffle(s.begin(),s.end());
顺便说一句,不要忘记包含<algorithm>
以使用std::random_shuffle
,并且您需要为<string>
添加std::string
。 <string.h>
用于c-string库,如果你打算在C ++中使用它,你应该实际使用<cstring>
。
答案 1 :(得分:2)
为什么要将std::string
与char*
混合?你应该直接在字符串上操作:
void scrambleString(std::string& str)
{
int x = str.length();
for(int y = x; y > 0; y--)
{
int pos = rand()%x;
char tmp = str[y-1];
str[y-1] = str[pos];
str[pos] = tmp;
}
}
用法变为:
std::string value = "This is a test";
scrambleString(value);
话虽如此,std::random_shuffle会为你做这件事......
答案 2 :(得分:1)
std :: string类无法隐式转换为char *。 您必须使用string.c_str()从std :: string转换为const char *。
注意c_str()返回一个指向从std :: string内部存储复制的字符串的const指针,因此您无法更改其内容。相反,你必须复制到另一个数组或向量。
答案 3 :(得分:0)
尝试使用它:
std :: string stringToScramble =“hello world”;
加扰(stringToScramble.c_str());
注意使用.c_str(),它应该将字符串转换为您需要的格式。
答案 4 :(得分:-1)
如果要将随机字符数据写入字符串,使用random库的C ++方式是:
#include <random>
std::string mystring = "scramble this please";
std::default_random_engine rng;
std::uniform_int_distribution<int> rng_dist(0, 255);
for(unsigned int n = 0; n != mystring.size(); ++n) {
mystring[n] = static_cast<unsigned char>(rng_dist(rng));
}