在使用C ++阅读文本文件时,我有一个关于如何处理"\n"
或"\r\n"
等的问题。当我执行以下操作序列时存在问题:
int k;
f>>k;
string line;
getline(f,line);
用于输入文件,如
1
abc
为了在f.get()
之后读取结尾"\n"
,我必须添加f>>k
。如果我f.get()
,我甚至必须做"\r\n"
两次。
如果我将>>
与getline
混合,那么阅读这样的文件的优雅方式是什么?
谢谢。
修改
另外,我想知道是否有任何方便的方法可以自动检测给定文件是否有行尾字符"\n"
或"\r\n"
。
答案 0 :(得分:4)
您需要稍微调整一下>>
和getline
才能愉快地一起工作。通常,使用>>
运算符从流中读取内容不会丢弃任何后续空格(换行符)。
解决此问题的常用方法是使用istream::ignore
之后的>>
函数 - 告诉它放弃包括下一个换行符在内的每个字符。 (仅在您确实要将每个字符丢弃到换行符时才有用。)
e.g。
#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完全可以互换)
答案 1 :(得分:0)
完全不同的方法是使用tr
(假设您使用Linux)预处理数据文件以删除\r
,然后使用getline()
。