如果没有打印,for循环如何工作

时间:2018-02-03 19:22:02

标签: c++ arrays loops for-loop char

我见过有人发布这个for循环,但我的问题略有不同。变量temp不会在每次迭代时被更改,所以只留下一个不断变化的角色吗?如何存储字符?此外,循环如何知道rand()不会为index1index2生成相同的数字?对不起,如果不是这么清楚,我有点新手!

#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();
}

1 个答案:

答案 0 :(得分:1)

  

每次迭代都不会更改变量temp,所以只留下一个不断变化的角色吗?

这取决于。请注意,您尝试在每次迭代中提出一个新的随机index1和一个新的随机index2。如果您的jumble变量为Redfieldindex1 = 1index2 = 5会怎样?你会交换两个e

但是因为在每次迭代中,您都试图在位置charsjumble上的index1字符串的随机位置访问index2

int index1 = (rand() % length);
int index2 = (rand() % length);

每次迭代时,这些索引的值都是不可预测的。您可能会再次获得15

尽管如此,请记住,您在每次迭代中都创建了一个变量temp,因此您不会更改其值,您将在每次迭代中分配一个新变量。

  

如何存储字符?

我不确定你的意思是什么,但每个字符都存储在1个字节以内。因此,字符串将是一个字节序列(char)。此序列是连续内存块。每次访问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);
}