我见过有人张贴了同样的for循环,但是我的问题略有不同。不会在每次迭代中更改变量temp
,而只留下一个不断变化的字符吗?字符如何存储?另外,循环如何知道rand()
不会为index1
和index2
生成相同的数字?抱歉,如果不清楚,我是新手!
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
int main()
{
enum { WORD, HINT, NUM_FIELDS };
const int NUM_WORDS = 3;
const std::string WORDS[NUM_WORDS][NUM_FIELDS] = {
{ "Redfield", "Main Resident Evil character" },
{ "Valentine", "Will you be mine?" },
{ "Jumbled", "These words are..." }
};
srand(static_cast<unsigned int>(time(0)));
int choice = (rand() % NUM_WORDS);
std::string theWord = WORDS[choice][WORD];
std::string theHint = WORDS[choice][HINT];
std::string jumble = theWord;
int length = jumble.size();
for (int i = 0; i < length; ++i) {
int index1 = (rand() % length);
int index2 = (rand() % length);
char temp = jumble[index1];
jumble[index1] = jumble[index2];
jumble[index2] = temp;
}
std::cout << jumble << '\n'; // Why 'jumbled word' instead of just a character?
std::cin.get();
}
最佳答案
不会在每次迭代中更改变量temp,只留下一个不断变化的字符吗?
这取决于。请注意,您正在尝试在每次迭代中提出一个新的随机index1
和一个新的随机index2
。如果您的jumble
变量是Redfield
,并且index1 = 1
和index2 = 5
会发生什么?您将交换两个e
。
但是,因为在每次迭代中,您都尝试在chars
和jumble
位置的index1
字符串的随机位置访问index2
:
int index1 = (rand() % length);
int index2 = (rand() % length);
这些索引的值在每次迭代中都是不可预测的。您可能会再次得到
1
和5
。不过,请记住,您要在每次迭代中创建一个变量
temp
,这样就不会更改其值,而是在每次迭代中分配一个新变量。字符如何存储?
我不确定在这里是什么意思,但是每个字符都存储在1个字节内。因此,字符串将是字节序列(字符)。此序列是一个连续的内存块。每次访问
jumble[index1]
时,都将访问字符串index1
中位置jumble
上的字符。如果
jumble = "Valentine"
和index1 = 1
,则您将访问a
,因为您的V
位于位置0。另外,循环如何知道rand()不会为index1和index2生成相同的数字?
没有。您必须提出一种策略来确保不会发生这种情况。一种方法而非有效的方法是:
int index1 = (rand() % length);
int index2 = (rand() % length);
while (index1 == index2) {
index1 = (rand() % length);
index2 = (rand() % length);
}
关于c++ - for循环如何在不打印的情况下工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48601111/