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
相关产品推荐
相关产品推荐

