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

如何将文件中的无空格数字按每4个存入vector<vector<int>>?

修复你的数字分组读取代码

我帮你看看这段代码的问题哈,几个小细节没处理好导致没法正常输出内容:


原代码的核心问题

  • 当i % 4 == 0时,你先把**空的word**塞进了二维vectorfle,然后又定义了一个局部的vector<int> word——这会屏蔽外层的word变量,后续的数字都存到这个临时局部变量里,根本没被正确添加到fle中。
  • 字符转数字的逻辑没写完:字符形式的数字(比如'1')要转成int,得用bit - '0',因为ASCII码里数字字符是连续的。
  • 循环里完全没对i做递增操作,导致i一直是0,永远触发i%4==0的分支,逻辑彻底乱了。
  • 循环结束后,最后一组不足4个的数字(如果文件长度不是4的倍数)会被丢弃,没加到结果里。

修正后的完整代码

#include <fstream>
#include <vector>
#include <string>

using namespace std;

vector<vector<int>> vectorReader(string path) {
    ifstream file(path);
    int i = 0;
    char bit;
    vector<vector<int>> fle;
    vector<int> word;

    if (file.is_open()) {
        while (file >> bit) {
            // 把字符数字转成int
            word.push_back(bit - '0');
            i++;

            // 每4个数字一组,就把当前word加入二维vector,然后重置word
            if (i % 4 == 0) {
                fle.push_back(word);
                word.clear(); // 清空当前组,准备存下一组
            }
        }
        // 处理最后一组不足4个的情况
        if (!word.empty()) {
            fle.push_back(word);
        }
        file.close();
    }
    return fle;
}

关键修改说明

  1. 调整分组逻辑:先把当前数字加入word,再判断是否满4个——这样不会提前插入空的组,而且用word.clear()重置,避免局部变量屏蔽的问题。
  2. 补全字符转数字:用bit - '0'完成转换,确保存入的是正确的int值。
  3. 添加i的递增:每次读入一个字符就把i+1,保证分组判断的逻辑正常运行。
  4. 处理剩余数字:循环结束后检查word是否为空,把最后一组(哪怕不足4个)也加入结果。

你可以试试这段代码,应该能正常把文件里的数字按4个一组存入二维vector了~

内容的提问来源于stack exchange,提问作者Roger_88

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:02:47