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

C++如何读取每行首个整数后将剩余内容存为带空格的单个字符串

C++读取行首整数+剩余整行内容的实现方案

核心实现逻辑

你可以结合输入流的>>运算符和std::ws、std::getline实现需求,不需要手动拆分字符串,代码如下:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream ins("input.txt");
    int num;
    std::string name;
    // 读取逻辑:先读整数→跳过所有前导空白→读取剩余整行内容
    while (ins >> num >> std::ws && std::getline(ins, name)) {
        // 此处可直接使用num和name变量,示例输出:
        std::cout << "数字:" << num << ",姓名:" << name << "\n";
    }
    return 0;
}

std::ws是标准库提供的流操纵符,作用是消耗输入流中所有连续的空白字符(包括空格、换行符、制表符等),刚好可以跳过读取整数后剩下的分隔空格,让后续getline从姓名的第一个有效字符开始读取,一直读到行尾,不管姓名中间有多少空格都能完整存入单个string变量。

原代码问题说明

你最初的写法默认每行固定有1个整数+3个字符串片段,当某行的字符串数量不足3个时,>>运算符会读取失败,输入流进入错误状态,循环条件直接不成立导致提前终止,完全没法适配名字长度不固定的场景。

用vector存储结果的方案

如果需要把所有读取的记录持久化存储,可以用vector搭配std::pair或者自定义结构体实现,示例如下:

#include <vector>
#include <utility>

// 在main函数中定义存储容器
std::vector<std::pair<int, std::string>> records;

// 读取循环中插入数据:
while (ins >> num >> std::ws && std::getline(ins, name)) {
    records.emplace_back(num, name);
}

后续可以直接遍历records容器使用所有读取到的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:00