如何通过循环优化带编号变量的4x4随机字符生成C++代码?
如何用循环优化带编号数组的C++随机字符输出代码
你当前的代码通过单独的dice1到dice16数组存储骰子字符,输出时只能逐个调用变量,没法用循环简化。当然可以优化,核心是把这些分散的数组整合为二维数组或指针数组,通过索引遍历替代带编号的变量名。
方案1:整合为二维数组(推荐)
把所有骰子数组合并成一个二维数组,直接通过索引访问,彻底避免带编号的变量名:
#include <iostream> #include <random> using namespace std; // 整合所有骰子为二维数组,dice[0]对应原dice1,dice[1]对应原dice2,以此类推 char dice[16][6] = { {'E', 'T', 'U', 'K', 'N', 'O'}, {'E', 'V', 'G', 'T', 'I', 'N'}, {'D', 'E', 'C', 'A', 'M', 'P'}, {'I', 'E', 'L', 'R', 'U', 'W'}, {'E', 'H', 'I', 'F', 'S', 'E'}, {'R', 'E', 'C', 'A', 'L', 'S'}, // 补充剩余dice7到dice16的内容,按你的需求填充 {'Y', 'L', 'D', 'E', 'V', 'R'}, {'O', 'B', 'J', 'O', 'A', 'B'}, {'N', 'A', 'H', 'N', 'L', 'O'}, {'H', 'D', 'S', 'P', 'C', 'O'}, {'U', 'I', 'M', 'O', 'Q', 'H'}, {'S', 'U', 'N', 'E', 'O', 'D'}, {'T', 'E', 'R', 'W', 'H', 'V'}, {'X', 'L', 'D', 'E', 'N', 'I'}, {'Z', 'N', 'R', 'N', 'H', 'L'}, {'E', 'A', 'N', 'A', 'E', 'G'} }; const int MIN = 0; const int MAX = 5; // 每个骰子数组有6个元素,索引范围0-5 int main() { // 初始化随机引擎 random_device rd; default_random_engine eng(rd()); uniform_int_distribution<int> distr(MIN, MAX); // 循环输出4x4的随机字符表格 for (int row = 0; row < 4; ++row) { // 每行对应4个骰子,通过row*4+col计算当前骰子的索引 for (int col = 0; col < 4; ++col) { int diceIndex = row * 4 + col; cout << dice[diceIndex][distr(eng)] << " "; } cout << endl; } return 0; }
关键说明:
- 整合后无需再用
dice1这类带编号的变量,直接通过二维数组的索引访问对应骰子。 - 用
row*4 + col计算当前骰子的位置,完美匹配4x4的输出格式。 - 修复了你原代码中未定义的
dice8这类变量名拼写错误问题。
方案2:用指针数组保留原数组定义
如果不想修改原有的单个数组定义,可以创建指针数组指向每个dice数组,间接实现循环访问:
#include <iostream> #include <random> using namespace std; // 保留原有的单个骰子数组定义 char dice1[6]={'E', 'T', 'U', 'K', 'N', 'O'}; char dice2[6]={'E', 'V', 'G', 'T', 'I', 'N'}; char dice3[6]={'D', 'E', 'C', 'A', 'M', 'P'}; char dice4[6]={'I', 'E', 'L', 'R', 'U', 'W'}; char dice5[6]={'E', 'H', 'I', 'F', 'S', 'E'}; char dice6[6]={'R', 'E', 'C', 'A', 'L', 'S'}; // 补充dice7到dice16的定义... // 创建指针数组,指向每个骰子数组 char* dicePtrs[16] = {dice1, dice2, dice3, dice4, dice5, dice6, dice7, dice8, dice9, dice10, dice11, dice12, dice13, dice14, dice15, dice16}; const int MIN = 0; const int MAX = 5; int main() { random_device rd; default_random_engine eng(rd()); uniform_int_distribution<int> distr(MIN, MAX); for (int row = 0; row < 4; ++row) { for (int col = 0; col < 4; ++col) { int diceIndex = row * 4 + col; cout << dicePtrs[diceIndex][distr(eng)] << " "; } cout << endl; } return 0; }
关键说明:
- 指针数组
dicePtrs的每个元素对应原有的dice1到dice16数组,通过索引即可循环访问。 - 无需修改原有数组结构,适合不想重构旧代码的场景。
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

