You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:45:05