如何通过c ++忽略从文本文件中读取的特定新行

时间:2014-02-16 20:58:54

标签: c++ string

无论何时,新行后面都有一个新行或(“\ n”)和一个空格(“”),我想忽略“\ n”并只打印输出中的空格,如何我可以这样做吗?

这是一个例子:

newegg
 bizrate

想要将其更改为:

newegg bizrate

我很困惑,因为我想我不能通过逐行阅读来做到这一点!下面是我粗略的代码,我不知道如何继续... 非常感谢。

ifstream file ("input.txt");
ofstream output("output.txt");
string line;
if(file.is_open())
{
    while (!file.eof())
    {
        getline (file, line);
        if (line.find("\n"+' ') != string::npos)
        {
            ??
        }

3 个答案:

答案 0 :(得分:1)

函数getline()(文档here)将读取并丢弃\n字符,因此无需在字符串中搜索它。

做这样的事情:

bool first = true;
while (!file.eof())
{
    getline(file, line);

    // you may want to check that you haven't read the EOF here

    if (!first)
    {
        cout << " ";
    }
    else
    {
        first = false;
    }

    cout << line;
}

答案 1 :(得分:1)

这样做。函数getline()将读取\n字符

getline(file, line);
cout<<line;
while (!file.eof())
{        
   getline(file, line);
   if (line[0]==' ')
   {
        cout <<" "<<line;
   }
   else
   {
         cout <<"\n"<<line;
   }
}

答案 2 :(得分:0)

你可能想要这个:

#include <cctype>
#include <iostream>
#include <sstream>

int main() {
    std::istringstream input(""
        "newegg\n"
        " bizrate\n"
        "End");
    std::string line;
    while(std::getline(input, line)) {
        while(std::isspace(input.peek())) {
            std::string next_line;
            std::getline(input, next_line);
            line += next_line;
        }
        std::cout << line << '\n';
    }
}

请注意:对EOF的测试可能是错误的。