Jim*_*lle 1 c++ random for-loop numbers while-loop
我是C++的新手.我正在关注一个免费的在线课程,我必须要做的一件事是创建一个可以扰乱字符串字符的程序.
所以,我创建了一个函数,它接收单词作为参数并返回加扰的单词.包含ctime和cstdlib并且srand(time(0)); 在主要宣布.
基本上,函数看起来像这样:
std::string mixingWord(std::string baseWord)
{
std::string mixWord;
int pos(0);
for (int i = baseWord.length; i >= 0; i--)
{
if (i != 0)
{
pos = rand() % i;
mixWord += baseWord[pos];
baseWord.erase(pos,1);
}
else
{
mixWord += baseWord[0];
}
}
return mixWord;
}
Run Code Online (Sandbox Code Playgroud)
它运作得很好.但正确的解决方案是
std::string mixingWord(std::string baseWord)
{
std::string mixWord;
int pos(0);
while (baseWord.size() != 0)
{
pos = rand() % baseWord.size();
mixWord += baseWord[pos];
baseWord.erase(pos, 1);
}
return mixWord;
}
Run Code Online (Sandbox Code Playgroud)
它也可以正常工作.我的问题是:为什么解决方案有效?根据我的理解,这个:
rand() % value
Run Code Online (Sandbox Code Playgroud)
给出介于0和给定值之间的值.
所以,因为baseWord.size()返回,所以假设像HELLO这样的单词,就说5.rand将生成一个介于0和5之间的数字.所以它可能是5.并且baseWord [5]超出范围,所以它应该偶尔崩溃一次,但我尝试了超过9000次(抱歉,dbz引用),并且它永远不会崩溃.
我只是不走运,还是我不理解某些事情?
x % y给出剩余的x / y.其结果永远不可能y,因为如果是,那么这将意味着y可以进入x一个更多的时间,其余的实际上是零,因为y分x均匀.所以回答你的问题:
我只是不走运,还是我不理解某些事情?
你误会了什么.rand() % value给出范围内的结果[0,value - 1](假设值为正),而不是[0, value].
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |