如何给Rand()条件

时间:2017-10-03 13:31:36

标签: c++

第一次堆栈溢出。

我有这个作业,因为我们有一个猜谜游戏,我们的程序必须生成一个由n长度和n不同的大写字母串由用户定义。我的大部分作业都在工作,但是当生成字符串时,我迷失了,因为我可以将这些条件放在适当的位置。

char create_sequence(){
   return rand() % 26 + 65;
}

你有任何提示吗?

2 个答案:

答案 0 :(得分:2)

如果您知道序列长度,则不需要大量不同的字符。这是因为您需要length <= characters

要创建n个唯一字符的序列,请编写一个单独的函数:

vector<char> create_sequence(int n) {
    vector<char> letters;
    for (char ch = 'A'; ch <= 'Z'; ++ch) {
        letters.push_back(ch);
    }

    vector<char> sequence;
    for (int i = 0; i < n; ++i) {
        int index = rand() % letters.size();
        sequence.push_back(letters[index]);
        letters.erase(letters.begin() + index, letters.begin() + index + 1);
    }

    return sequence;
}

答案 1 :(得分:1)

嗯,我个人认为你离答案不远:

rand() % 26 + 65

将有效返回大写的ASCII字母。只要您将随机种子初始化srand (time(NULL));一次,就可以根据需要多次调用您的指令来获取随机值。所以你想念的只是一个简单的循环。以下是5个字符的示例:

#include <iostream>
#include <string>
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */


char randomChar(){
   return rand() % 26 + 65;
}

std::string randomString(int length)
{
    srand (time(NULL));
    std::string rc("");
    for(int i=0; i<length; ++i)
    {
        rc += randomChar();
    }
    return rc;
}

int main()
{
  std::cout << "Random string (x5) is " << randomString(5) << "\n";
}