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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:17