如何在C++中将空格分隔文件内容读取到三个不同vector中
解决方法:将空格分隔的三组数据读取到不同Vector中
看起来你是想把一串按整数 整数 浮点数重复模式排列的空格分隔数据,分别存入三个不同类型的vector里。你的代码没写完,但我能猜到核心问题是如何正确拆分这些数据并分类存储。下面给你两种可行的方案:
方案1:直接从标准输入读取(最简单)
如果你的输入不管是单行还是多行,只要数据是按int int double的顺序连续排列的,直接用std::cin循环读取就行——它会自动跳过所有空白字符(空格、换行、制表符),非常省心:
#include <iostream> #include <vector> int main() { std::vector<int> row1; std::vector<int> row2; std::vector<double> row3; int val1, val2; double val3; // 循环读取三个一组的数据,直到输入结束(比如Ctrl+D/Ctrl+Z) while (std::cin >> val1 >> val2 >> val3) { row1.push_back(val1); row2.push_back(val2); row3.push_back(val3); } // 验证读取结果(可按需删除) std::cout << "row1 存储的整数:"; for (int num : row1) std::cout << num << " "; std::cout << "\nrow2 存储的整数:"; for (int num : row2) std::cout << num << " "; std::cout << "\nrow3 存储的浮点数:"; for (double num : row3) std::cout << num << " "; std::cout << std::endl; return 0; }
关键说明:
- 不用刻意处理行:
std::cin会自动忽略空白,不管你的输入是一整行还是分成多行,都能正确识别每一组三个值。 - 循环终止条件:当无法读取到三个符合类型的值时(比如输入结束、遇到非数值字符),循环会自动退出。
- Vector初始化:不需要写
= {},默认构造函数已经会创建空的vector了。
方案2:逐行读取并解析(适合多行输入场景)
如果你的输入是多行数据,且需要逐行处理(比如每行可能包含多组数据),可以结合std::getline和std::istringstream来实现:
#include <iostream> #include <vector> #include <string> #include <sstream> int main() { std::vector<int> row1; std::vector<int> row2; std::vector<double> row3; std::string line; // 逐行读取输入 while (std::getline(std::cin, line)) { std::istringstream line_stream(line); // 将当前行转为输入流 int val1, val2; double val3; // 解析当前行内的所有三组数据 while (line_stream >> val1 >> val2 >> val3) { row1.push_back(val1); row2.push_back(val2); row3.push_back(val3); } } // 验证读取结果(可按需删除) std::cout << "row1 存储的整数:"; for (int num : row1) std::cout << num << " "; std::cout << "\nrow2 存储的整数:"; for (int num : row2) std::cout << num << " "; std::cout << "\nrow3 存储的浮点数:"; for (double num : row3) std::cout << num << " "; std::cout << std::endl; return 0; }
关键说明:
std::istringstream可以把字符串当成输入流来处理,这样就能用和std::cin一样的方式读取里面的数值。- 嵌套循环:外层循环处理每一行,内层循环处理当前行里的所有三组数据。
针对你原始代码的小提示:如果之前尝试用std::getline但没成功,大概率是没把字符串转成输入流来解析数值——直接操作字符串拆分数值会很麻烦,用istringstream是C++里的标准做法。
内容的提问来源于stack exchange,提问作者Morpheus
相关产品推荐
相关产品推荐

