修改cin也返回换行符

时间:2012-01-06 22:18:30

标签: c++

我知道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é .

3 个答案:

答案 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! ";
}