读取C++文本文件

read text file in C++

本文关键字:文件 文本 C++ 读取      更新时间:2023-10-16

我有一个关于在C++中读取文本文件时如何处理"n""rn"等的问题。当我执行以下操作序列时,存在此问题:

int k;
f>>k;
string line;
getline(f,line);

对于具有类似内容的输入文件

1
abc

我必须放一个f.get()才能在f>>k之后读出结尾"n".如果我有f.get(),我什至必须做两次"rn".

如果我>>getline混合,阅读这样的文件的优雅方式是什么?

谢谢。

编辑另外,我想知道是否有任何方便的方法可以自动检测给定文件具有行尾字符"n""rn"

你需要摆

弄一点才能>>getline愉快地一起工作。 通常,使用 >> 运算符从流中读取某些内容不会丢弃任何后续空格(换行符)。

解决此问题的常用方法是在>>之后使用 istream::ignore 函数 - 告诉它丢弃每个字符,直到并包括下一个换行符。 (仅当您真的想丢弃每个字符直到换行符时才有用)。

例如

#include <iostream>
#include <string>
#include <limits>
int main()
{
    int n;
    std::string s;
    std::cout << "type a number: ";
    std::cin >> n;
    std::cin.ignore( std::numeric_limits<std::streamsize>::max(), 'n' );
    std::cout << "type a string: ";
    std::getline( std::cin, s );
    std::cout << s << " " << n << std::endl;
}

编辑(我知道您在问题中提到了文件,但希望不用说 std::cin 与 ifstream 完全可以互换)

一种完全不同的方法是使用 tr(假设您使用 Linux)预处理数据文件以删除r,然后使用 getline()