如何创建一个随机混乱字符串的函数

时间:2011-02-18 02:28:47

标签: c++ string pointers char

我的主要功能包含一个我想混杂的字符串。我找到了一段代码,它传入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*,但这不允许我访问该词并进行更改。

5 个答案:

答案 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::stringchar*混合?你应该直接在字符串上操作:

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));
}
相关问题