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

C++中使用ifstream读取含多空格姓名列的问题

解决C++读取含空格的姓名列问题

你的问题出在默认的>>运算符会把所有空格(不管多少个)都当作分隔符,所以当姓名只有1个空格时,name3会去读下一行的第一个数据,导致错位。要把姓名作为单个变量读取,得先读完前四列,再读取当前行剩下的所有内容当作姓名。

可行方案代码示例

#include <fstream>
#include <string>
#include <limits>
#include <algorithm>

int main() {
    std::ifstream infile("your_file.txt");
    std::string recordDate;
    double relativeHumidity, airTemp;
    char tempUnit;
    std::string name;

    // 跳过表头行
    std::string header;
    std::getline(infile, header);

    while (infile >> recordDate >> relativeHumidity >> airTemp >> tempUnit) {
        // 方式1:跳过tempUnit后的空格,直接读取姓名
        infile.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
        std::getline(infile, name);

        // 方式2:读取整行后自动去除姓名前的空格(适配空格数量不确定的情况)
        // std::getline(infile, name);
        // name.erase(name.begin(), std::find_if(name.begin(), name.end(), [](int ch) {
        //     return !std::isspace(ch);
        // }));

        // 验证读取结果
        std::cout << "日期: " << recordDate << "\n";
        std::cout << "相对湿度: " << relativeHumidity << "\n";
        std::cout << "气温: " << airTemp << tempUnit << "\n";
        std::cout << "姓名: " << name << "\n\n";
    }

    infile.close();
    return 0;
}

方案说明

  1. 先用>>读取前四个无空格的字段,这部分逻辑不受空格影响,能稳定读取数据。
  2. 两种读取姓名的方式:
    • 方式1通过ignore跳过tempUnit后的所有空格,确保getline直接读取姓名内容。
    • 方式2直接读取整行剩余内容,再手动去除姓名前的空格,适配列间空格数量不固定的场景。
  3. getline会读取当前行剩余的所有字符(包括空格)直到换行符,完美匹配姓名含1-2个空格的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:55:47