我是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和给定值之间的值. …