【发布时间】:2019-01-12 04:22:12
【问题描述】:
所以我正在这里处理这个 for 循环:
for (int i = 0; i < num; i++) {
for (int i = 0; i < length; i++) {
Str += randGen();
}
cout << Str << endl;
}
}
对于上下文,整数“长度”是随机生成的字符串大小。这是我的 randGen() 函数:
static const char combination[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(combination) - 1;
char randGen() {
return combination[rand() % stringLength];
}
基本上我的问题是,如果 'num' 大于一,它会打印出每个相同的开始随机生成的部分,并且不会改变。唯一一次有新的随机生成的字符是当“长度”的大小增加时,就是这样。但是,我希望所有的 STR 都完全不同。谁能帮帮我?
--提前谢谢--
【问题讨论】:
-
你一直追加到同一个字符串。每次打印时,它都会重复前面的前缀加上新添加的字符。也许这就是诱使您认为生成了相同字符的原因。您可能希望在循环之间清除
Str。 -
@Igor Tandetnik 是的,我就是这么想的。谢谢,这真的很有帮助。
-
尝试在拨打
rand之前添加srand(time(NULL));。它将根据当前时间为rand设置种子。这应该只被调用一次(例如在程序的开头)。 -
在 C++ 中,您应该在
<random>标头中使用std::string和 C++ 随机生成器,因为它们更易于使用。例如,您不会忘记在程序开始时设置种子,因为构建随机生成器需要种子。 -
在内部和外部循环中为循环控制变量使用相同的变量名是一个非常糟糕的主意。虽然它确实可以编译,但当您必须调试问题时,它会导致一个痛苦的世界。
标签: c++ for-loop random random-seed