如何将文件中的无空格数字按每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; }
关键修改说明
- 调整分组逻辑:先把当前数字加入
word,再判断是否满4个——这样不会提前插入空的组,而且用word.clear()重置,避免局部变量屏蔽的问题。 - 补全字符转数字:用
bit - '0'完成转换,确保存入的是正确的int值。 - 添加
i的递增:每次读入一个字符就把i+1,保证分组判断的逻辑正常运行。 - 处理剩余数字:循环结束后检查
word是否为空,把最后一组(哪怕不足4个)也加入结果。
你可以试试这段代码,应该能正常把文件里的数字按4个一组存入二维vector了~
内容的提问来源于stack exchange,提问作者Roger_88
相关产品推荐
相关产品推荐

