【问题标题】:toString function from 2D array二维数组中的 toString 函数
【发布时间】:2019-10-07 23:10:03
【问题描述】:

非常抱歉,如果这太长了-- 我昨天发布了一个关于我正在尝试编写的游戏程序的问题,在一些人的帮助下,我很快就解决了所有问题。

程序的绝大部分已经完成,但我还有最后一个奇怪的任务要完成。我编写了一个函数 printGrid,它从 char 数组中的每 16 个字符包中打印一个随机元素。例如(非常丑陋——请原谅我的初学者代码):

        char gameZero[outer_size][inner_size] = {
    {'A','A','C','I','O','T'}, {'A','H','M','O','R','S'},  

    {'E','G','K','L','U','Y'}, {'A','B','I','L','T','Y'}, {'A','C','D','E','M','P'},   
     {'E','G','I','N','T','V'}, {'G','I','L','R','U','W'}, {'E','L','P','S','T','U'},  
     {'D','E','N','O','S','W'}, {'A','C','E','L','R','S'}, {'A','B','J','M','O','Q'},  
     {'E','E','F','H','I','Y'}, {'E','H','I','N','P','S'}, {'D','K','N','O','T','U'},  
 {'A','D','E','N','V','Z'}, {'B','I','F','O','R','X'}  
     };  
    void printGrid() {
mt19937 gen(time(nullptr));
uniform_int_distribution<int> random_inner(0, inner_size - 1);
int n = random_inner(gen);

cout << "+---+---+---+---+\n";
for (int i = 0; i < 4; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 4; i < 8; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 8; i < 12; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 12; i < 16; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";

}

这将打印一个 4x4 游戏板供用户查看。我现在正在尝试编写一种 toString 函数,它采用 printGrid 中生成的随机数并将它们打印成没有空格的单行字符串。我试图解决的问题是,每次玩家开始新游戏时,我都有各种各样的角色。这 16 个字符来自一组 16 个骰子,每个骰子包含 6 个字符。将这些新随机选择的字符存储到一个空数组中以便用户可以在需要时使用 toString 函数简单地打印它们是唯一的方法吗?我必须解决的另一个障碍是每次用户想要重新开始时删除数组。如果是这种情况,我可以将它们存储在一个向量中并使用类似 vector::clear 的东西来解决这个问题吗?

printGrid 函数的当前输出:

 +---+---+---+---+
 | T | M | E | L |
 +---+---+---+---+
 | A | V | L | S |
 +---+---+---+---+
 | E | A | Qu| F |
 +---+---+---+---+
 | E | D | N | O |
 +---+---+---+---+

我想创建的 toString 函数的期望输出:

 TMELAVLSEAQuFEDNO

非常抱歉,如果阅读内容过多或过于混乱 - 我几乎整天都在研究这个问题,而我的大脑此刻有点发烫。非常感谢任何提示!

【问题讨论】:

  • 请用预期输出和实际输出编辑您的帖子。
  • @ThomasMatthews 完成,谢谢!
  • 我不明白。绘制网格时,您有选择字符的逻辑。您可能希望使用相同的逻辑,但使用 std::string 和运算符 += 将选定的字符附加到字符串。
  • @ThomasMatthews 你是 100% 正确的。我整天都在试图围绕整个项目进行思考,我似乎很容易迷失在简单的事情中。我在 for 循环中添加了一个向量和 push_back 语句,并简单地打印出向量中的元素。谢谢!

标签: c++ arrays string vector tostring


【解决方案1】:

你有选择字符的逻辑,例如:

for (int i = 0; i < 4; i++)
    cout << "| " << gameZero[i][n] << " ";

您可以使用std::string 和运算符+= 将字符附加到字符串:
std::string all_letters;

for (int i = 0; i < 4; ++i)
{
  all_letters += gameZero[i][n];
}

编辑 1:扩展循环
由于不需要逐行打印,因此可以遍历整个数组:

std::string all_letters;

for (int i = 0; i < 16; ++i)
{
    all_letters += gameZero[i][n];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2017-01-19
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多