【问题标题】:Is there a Python fstring or string formatting equivalent in C++?C++ 中是否有等效的 Python fstring 或字符串格式?
【发布时间】:2021-12-17 07:50:05
【问题描述】:

我正在使用 C++ 开发一个项目,我需要创建一个包含数组元素的字符串。我知道在 python 中你有 sting formattingfstrings 之类的东西,但我不知道 C++ 是否有任何等价物。我不知道这是否是一件事,所以我认为这是最好的提问地点。我正在做一个井字游戏,我已经制作了棋盘,并且我已经制作了棋盘上的位置。我要做的就是优化板子,以便我可以从另一个函数中的一个函数调用它,并让父函数返回板子,以便我可以使用它。我如何做到这一点的基本想法是把板子变成一个大字符串,里面有一堆换行符和数组元素。我还在一个函数中创建了它,所以我可以在需要它的任何地方调用它并把它放在那里。这是我做的板子函数:

void board(){
char board_pos[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
cout << "     |     |     " << endl;
cout << "  " << board_pos[0][0] << "  |  " << board_pos[0][1] << "  |  " << board_pos[0][2] << "  " << endl;
cout << "     |     |     " << endl;
cout << "-----------------" << endl;
cout << "     |     |     " << endl;
cout << "  " << board_pos[1][0] << "  |  " << board_pos[1][1] << "  |  " << board_pos[1][2] << "  " << endl;
cout << "     |     |     " << endl;
cout << "-----------------" << endl;
cout << "     |     |     " << endl;
cout << "  " << board_pos[2][0] << "  |  " << board_pos[2][1] << "  |  " << board_pos[2][2] << "  " << endl;
cout << "     |     |     " << endl;
}

编辑:感谢你们的帮助,我明白了,我真的很感激。 :)

【问题讨论】:

  • 你有什么问题?
  • 您是否在寻求改进方法?见Code Review
  • 如果您想要string 而不是写入控制台,请阅读std::ostringstream,然后用字符串流替换对cout 的调用。完成后,您会从字符串流中获得string
  • “我对如何做到这一点一无所知” -- 不,你有一个想法。请参阅以“我如何做到这一点的基本想法是” 开头的问题部分。如果您不确定下一步该做什么,您可能需要回到您的设计并更详细地写出来。有时您必须深入细致地了解障碍是什么。
  • 好的,我刚刚发现这个问题被重新打开了,这很好,但我想出了如何自己做我所问的问题。我仍然感谢所有的帮助。谢谢你:)

标签: c++ arrays string string-formatting


【解决方案1】:

我只会返回您用来固定电路板的类型。在您的情况下,您从 char[3][3] 开始。

我会使用 C++11 array 来写:

using Row   = std::array<char, 3>;
using Board = std::array<Row, 3>;

现在你可以制作各种功能了:

void move(char player, Board const& b, int row, int col);
bool is_game_over(Board const&);
void print(Board const& b);

等等

您的打印功能可能是:

void print(Board const& b)
{
    std::cout << "     |     |     \n";
    auto print_row = [](Row const& row) {
        std::cout << "  " << row[0] << "  |  " << row[1] << "  |  " << row[2]
                  << "  \n";
    };
    print_row(b[0]);
    std::cout << "     |     |     \n";
    std::cout << "-----------------\n";
    std::cout << "     |     |     \n";
    print_row(b[1]);
    std::cout << "     |     |     \n";
    std::cout << "-----------------\n";
    std::cout << "     |     |     \n";
    print_row(b[2]);
    std::cout << "     |     |     \n";
}

Live

打印

     |     |
  1  |  2  |  3
     |     |
-----------------
     |     |
  4  |  5  |  6
     |     |
-----------------
     |     |
  7  |  8  |  9
     |     |

【讨论】:

  • 作为一个玩具示例,我可能会采用这种方法,将电路板简化为平面阵列:coliru.stacked-crooked.com/a/1fce09f372d82ffe demo imgur.com/a/GMl85a0
  • 感谢您的帮助,我使用了您的代码并尝试对其进行修改以获得我正在寻找的结果,但我无法让输出看起来正确。我仍然非常感谢您的帮助,我只是想让您知道,由于您的帮助,我最终弄清楚了如何做到这一点。非常感谢您所做的一切,非常感谢:)
  • @SentBySunlight 很高兴听到。谢谢你的好话
猜你喜欢
  • 2017-11-29
  • 2012-02-02
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多