我知道getline()
,但遇到cin
可能会返回\n
会很好。
实现这一目标(或类似)的任何方式?
编辑(示例):
string s;
while(cin>>s){
if(s == "\n")
cout<<"newline! ";
else
cout<<s<<" ";
}
输入文件txt:
hola, em dic pere
caram, jo també .
最终结果应该是:
hola, em dic pere newline! caram, jo també .
答案 0 :(得分:3)
如果您正在阅读各行,则知道每条读取行后面都有换行符。好吧,除了文件中的最后一行不必由换行符分隔以便读取成功,但是你可以通过检查eof()
来检测是否有新行:if std::getline()
成功但eof()
已设置,最后一行未包含换行符。显然,这需要使用std::string
std::getline()
版本的for (std::string line; std::getline(in, line); )
{
std::cout << line << (in.eof()? "": "\n");
}
:
std::cout
这应该在读取时将流写入for (std::string line; std::getline(in, line); )
{
std::cout << line << (in.eof()? "": "newline! ");
}
。
问题是要输出数据,但换行符换成“换行符!”。您可以通过以下方式实现此目的:
std::string
如果您不关心流被分割成行但实际上只想获取整个文件(包括所有换行符),您只需将流读入std::string file((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
:
std::getline()
但是,请注意,这种确切的方法可能相当慢(尽管我知道可以快速完成)。如果您知道该文件不包含某个字符,您还可以使用std::string
将整个文件读入std::getline(in, file, 0);
:
{{1}}
以上代码假定您的文件不包含任何空字符。
答案 1 :(得分:2)
修改@ Dietmar的答案应该可以解决问题:
for (std::string line; std::getline(in, line); )
{
std::istringstream iss(line);
for (std::string word; iss >> word; ) { std::cout << word << " "; }
if (in.eof()) { std::cout << "newline! "; }
}
答案 2 :(得分:0)
只是为了记录,我最终使用了这个(我想在11小时前发布)
string s0, s1;
while(getline(cin,s0)){
istringstream is(s0);
while(is>>s1){
cout<<s1<<" ";
}
cout<<"newline! ";
}