第一次堆栈溢出。
我有这个作业,因为我们有一个猜谜游戏,我们的程序必须生成一个由n长度和n不同的大写字母串由用户定义。我的大部分作业都在工作,但是当生成字符串时,我迷失了,因为我可以将这些条件放在适当的位置。
char create_sequence(){
return rand() % 26 + 65;
}
你有任何提示吗?
答案 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";
}