C++是否存在与Python fstring、字符串格式化功能等效的实现?
C++ 等效Python字符串格式化方案及棋盘函数改造
对应Python的string formatting和f-string功能,C++有成熟的等效实现,同时可以直接改造你现有的棋盘函数为返回字符串的可复用版本:
通用兼容方案(支持所有C++版本)
使用<sstream>头文件的std::ostringstream完成字符串拼接,不需要依赖高版本标准库:
#include <string> #include <sstream> std::string get_board() { char board_pos[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}}; std::ostringstream oss; oss << " | | " << "\n"; oss << " " << board_pos[0][0] << " | " << board_pos[0][1] << " | " << board_pos[0][2] << " " << "\n"; oss << " | | " << "\n"; oss << "-----------------" << "\n"; oss << " | | " << "\n"; oss << " " << board_pos[1][0] << " | " << board_pos[1][1] << " | " << board_pos[1][2] << " " << "\n"; oss << " | | " << "\n"; oss << "-----------------" << "\n"; oss << " | | " << "\n"; oss << " " << board_pos[2][0] << " | " << board_pos[2][1] << " | " << board_pos[2][2] << " " << "\n"; oss << " | | " << "\n"; return oss.str(); }
上层调用时直接获取返回的std::string对象即可,可直接打印或做后续处理:
// 调用示例 std::string board_str = get_board(); std::cout << board_str;
C++20 高版本最优方案
C++20标准库新增了std::format,语法和Python格式化字符串几乎一致,代码更简洁:
#include <string> #include <format> std::string get_board() { char board_pos[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}}; return std::format(R"( | | {} | {} | {} | | ----------------- | | {} | {} | {} | | ----------------- | | {} | {} | {} | | )", board_pos[0][0], board_pos[0][1], board_pos[0][2], board_pos[1][0], board_pos[1][1], board_pos[1][2], board_pos[2][0], board_pos[2][1], board_pos[2][2] ); }
这里用到了C++11及以上支持的原生字符串字面量R"()",可以保留字符串内的换行和空格,不需要额外转义。
内容的提问来源于stack exchange,提问作者SentBySunlight
相关产品推荐
相关产品推荐

