c++ - 在不重复的情况下选择随机字符 C++

标签 c++

我需要不重复地选择 m 个随机字符(字母),我完全卡住了,我一直只得到 1 个随机字母。我该如何修复我的代码?有没有办法解决这个问题,或者我应该放弃这个想法并从一些 kinf od 教程中寻找解决方案?

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>

using namespace std;

int main()
{
  cout << "number below 27" << endl;
  int m;
  cin >> m;

  srand(time(NULL));
  bool repeat = false;
  char letters[m];
  char letter;
  for(int i = 0; i < m; i++){
    letter = rand()%26 +97;
    repeat = true;
    for(int j = 0; j < m; j++){
      if(letters[m] == letters[j]){
        repeat = false;
        break;
      }
    }
    if(repeat){
      letters[m] = letter;
    }
  }
  for (int i = 0; i < m; i++){
    cout << letters[m];
  }
}

最佳答案

你可以使用 suffle -

#include <random>
#include <iostream>
#include <algorithm> 
#include <vector>

using namespace std;

int main ()
{
  char charSet[]={'a','b','c'};//You can add all the charecters
  std::random_device rd;
  std::mt19937 g(rd());
  std::shuffle(charSet,charSet+3,g);
  for(auto c : charSet)
  {
    std::cout<<c;
  }
  std::cout<<endl;
  return 0;
}

关于c++ - 在不重复的情况下选择随机字符 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41015311/

相关文章:

c++ - 写入索引缓冲区时崩溃

c++ - 通常如何进行内存对齐?

c++ - 三重映射,包括 2 个键

c++ - opencv\modules\core\src\persistence.cpp :2697: error: (-27) NULL or empty buffer in function cvOpenFileStorage

c++ - 为什么重启后串口读取不起作用?

C++ 将二进制(P5)图像转换为 ascii(P2)图像(.pgm)

c++ - 参数化运算符重载

c++ - 运行时计数器退出代码 139,但 gdb 使其通过

c++ - Windows下的_stat()到底是怎么工作的

c++ - "no matching function call..."这个错误是从哪里来的,我该如何解决?