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

C++中如何将getline读取的含空格数据分割为不同变量?

实现方法

有几种常用方式可以将该行的两个数值分割到不同变量中:

方法一:直接从文件流读取(最简便)

文件中的两个数值以空格分隔,C++输入流默认会以空白字符(空格、换行等)作为分隔符,因此可以直接跳过getline,从文件流中读取两个整数:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream billFile;
    billFile.open("bill.in");

    if (billFile.is_open()) {
        int num1, num2;
        // 自动跳过空格,读取两个整数
        billFile >> num1 >> num2;
        
        cout << "第一个数值:" << num1 << endl;
        cout << "第二个数值:" << num2 << endl;
    }
    billFile.close(); // 记得关闭文件
    return 0;
}

方法二:用stringstream处理已读取的整行字符串

如果已经通过getline获取了整行内容line1,可以借助stringstream拆分字符串:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    ifstream billFile;
    billFile.open("bill.in");

    if (billFile.is_open()) {
        string line1;
        getline(billFile, line1);
        
        int num1, num2;
        stringstream ss(line1);
        // 从stringstream中读取两个整数
        ss >> num1 >> num2;
        
        cout << "第一个数值:" << num1 << endl;
        cout << "第二个数值:" << num2 << endl;
    }
    billFile.close();
    return 0;
}

方法三:C风格sscanf解析(兼容C写法)

若习惯C风格字符串处理,也可以用sscanf解析:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    ifstream billFile;
    billFile.open("bill.in");

    if (billFile.is_open()) {
        string line1;
        getline(billFile, line1);
        
        int num1, num2;
        // 按格式解析字符串
        sscanf(line1.c_str(), "%d %d", &num1, &num2);
        
        cout << "第一个数值:" << num1 << endl;
        cout << "第二个数值:" << num2 << endl;
    }
    billFile.close();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53