【问题标题】:How to create a function which randomly jumbles a string如何创建一个随机混淆字符串的函数
【发布时间】:2011-06-29 13:18:00
【问题描述】:

我的 main 函数包含一个我想弄乱的字符串。我找到了一段代码,它传入 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*,但这不允许我访问和更改单词。

【问题讨论】:

    标签: c++ string pointers char


    【解决方案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));
    }
    

    【讨论】:

    • -1,因为(旧的,已回答的)问题不是用随机字符填充字符串,而是随机打乱字符串中字符的顺序。
    【解决方案2】:

    试试这个:

    std::string s = "Hello";
    std::random_shuffle(s.begin(),s.end());
    

    顺便说一句,不要忘记包含&lt;algorithm&gt; 才能使用std::random_shuffle,并且您需要包含&lt;string&gt; 才能使用std::string&lt;string.h&gt; 用于 c-string 库,如果你打算在 C++ 中使用它,你实际上应该使用 &lt;cstring&gt;

    【讨论】:

    • 所有我想说的都加上using namespace std; 考虑std::string
    【解决方案3】:

    为什么要将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 会为你做这件事...

    【讨论】:

      【解决方案4】:

      std::string 类不能隐式转换为 char*。 您必须使用 string.c_str() 从 std::string 转换为 const char*。

      注意 c_str() 返回一个指向从 std::string 内部存储复制的字符串的 const 指针,因此您无法更改其内容。相反,您必须复制到另一个数组或向量。

      【讨论】:

      • 如果你打算使用 C++ 和 STL ... 为什么要使用 char*?
      【解决方案5】:

      尝试像这样使用它:

      std::string stringToScramble = "hello world";

      scramble(stringToScramble.c_str());

      注意使用 .c_str() 应该将字符串转换为您需要的格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 2011-05-24
        • 1970-01-01
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        相关资源
        最近更新 更多