C++如何读取无分隔符的01迷宫文件并将内容存入二维数组
C++读取无分隔符0/1迷宫文件存入二维数组方案
需求说明
- 读取内容为连续0/1的
maze.txt文件,1代表阻挡、0代表可通行 - 将每个0/1字符单独存入
maze[17][17]二维整型数组 - 不修改原文件内容(原文件的0/1无空格分隔)
原maze.txt示例
11111111111111111 10000000000101001 10100111111001101 10101100001010101 10111010100000001 10000011011111001 11111000010001001 10110010000100101 10110100101110111 10000111000100001 10110011000100101 10110010000011101 10111001111110101 10110010000010001 10010111110101111 10010000000000001 11111111111111111
现有代码问题
原有基于istringstream读取整数的逻辑仅适用于数字之间有空格分隔的场景,对于连续无分隔的数字串,ss >> num会把一整行数字当做一个整数读取,无法实现单个字符存入数组的需求。
修改后实现代码
基于现有代码调整,仅需修改行内容处理逻辑即可:
#include <iostream> #include <fstream> #include <string> using namespace std; void read_maze(int map[17][17]) { ifstream read_file("D:/maze.txt", ios::in); if (read_file.good()){ string str; int i = 0; // 新增边界判断,避免文件行数超17导致数组越界 while (getline(read_file, str) && i < 17) { int j = 0; // 直接遍历当前行的每个字符 while (j < str.size() && j < 17) { // 数字字符转对应整型:利用ASCII码连续性,字符减'0'得到对应整数 map[i][j] = str[j] - '0'; j++; } i++; } } // 验证输出 for (int i = 0; i < 17; i++) { for (int j = 0; j < 17; j++) { cout << map[i][j]; } cout << endl; } read_file.close(); }
核心修改说明
- 移除了
istringstream读整数的逻辑,改为直接遍历getline获取的每行字符串的单个字符 - 字符转整型的逻辑:ASCII码中
'0'到'9'是连续编码,任意数字字符减去'0'即可得到对应的整型数值 - 新增数组边界判断,避免文件行数/列数超出17时出现数组越界异常
内容的提问来源于stack exchange,提问作者Learning
相关产品推荐
相关产品推荐

