首页 > 解决方案 > 需要生成x(输入)个字母,然后将它们放入4的char数组中

问题描述

输入只能是 5、7 或 9。假设在这种情况下输入是 5,所以程序生成 5 * 4 个字母:“DECBEDBDEDACBEAAC B”,现在我需要将它们放入 4 的数组中,所以 5 个字符数组,但我不知道该怎么做。这是我生成字母的方式。我把所有生成的都放在一个 char 数组中,但我也不知道如何将它分成 4 个更小的 char 数组。另一个问题是,正如我所提到的,每次运行时输入都会发生变化,但可以是 5、7或 9,所以程序不知道它需要多少个 4 数组。

由于条款,我不能使用向量,只能使用标准库。

for (int i = 0; i < (input * 4); ++i) {
    int n = (rand() % 5) + 1;
    char kar = (char) (n + 64);
    letters[i] = kar;
}

如果我将所有生成的字母放在一个数组中,这是我打印它的方式:

for (int j = 0; j < input* 4; ++j) {
    if (j % 4 == 0) {
        cout << "\nLetters in the " << (j / 4) + 1 << ". array: ";
    }
    cout << letters[j] << " ";
}

我需要像现在这样的输出,但使用分离的数组。

Letters in the 1. array: D E C B
Letters in the 2. array: E D E D
Letters in the 3. array: B D E D
Letters in the 4. array: A C B E
Letters in the 5. array: A A C B

标签: c++arrays

解决方案


你所需要的只是嵌套数组,就像这样letters[][]

但是,您不能在 c++ 中拥有可变大小的数组。但是你的上限是 9,所以你可以

char letter[9][4];
for (int i = 0; i < input; ++i)
  for (int j = 0; j < 4; ++j)
    letter[i][j] = ...

我建议使用std::vector。您要求“由于条款,我不能使用向量,只能使用标准库。” 似乎很矛盾。

此外,请避免在此处使用 c 样式强制转换(char) (n + 64)。宁愿做static_cast<char>(n + 64)

此外,rand()不推荐生成随机数的方法。有关如何很好地生成随机数的示例,请参见this 。


推荐阅读