如何不修改vector元素类型 将输出的整数0转换为.字符显示
解决方案
通用跨平台实现(无额外依赖)
- 完全不需要修改你原有
vector<vector<bool>>的定义与内部元素,仅调整输出逻辑即可实现效果:
#include <iostream> #include <vector> using namespace std; int main() { // 你的原有迷宫定义,保持不变 vector<vector<bool>> maze(3, vector<bool>(12, false)); // 仅修改输出部分 for (const auto& row : maze) { for (bool cell : row) { // 0对应false输出.(ASCII 46),1对应true可输出墙壁符号#(ASCII 35) cout << (cell ? (char)35 : (char)46); } cout << '\n'; } return 0; }
- 该方案没有修改任何迷宫存储逻辑,也没有引入char类型的存储结构,完全符合你的需求。如果不介意显式使用字符常量,也可以把
(char)35换成'#'、(char)46换成'.',运行效果完全一致。
Windows平台专属实现(基于Windows.h API)
你记忆中用Windows.h搭配ASCII码的方案本质是直接向控制台输出缓冲区写入对应ASCII字符,同样不需要修改原有迷宫结构:
#include <vector> #include <windows.h> int main() { // 原有迷宫定义不变 vector<vector<bool>> maze(3, vector<bool>(12, false)); HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); COORD writePos = {0, 0}; DWORD writeCount; for (int y = 0; y < maze.size(); y++) { writePos.Y = y; writePos.X = 0; for (int x = 0; x < maze[y].size(); x++) { char outputChar = maze[y][x] ? 35 : 46; WriteConsoleOutputCharacterA(hConsole, &outputChar, 1, writePos, &writeCount); writePos.X++; } } return 0; }
内容的提问来源于stack exchange,提问作者Beam291
相关产品推荐
相关产品推荐

