如何删除这些空行

时间:2015-03-09 13:58:40

标签: c++ removing-whitespace

我可以检测到文本中的空行,但没有得到如何删除它  请你给我一些如何删除检测到的行的提示

#include <iostream>

#include <fstream>

#include <string>
#include <cstdlib>
using namespace std;

int main()
{

// open input file

    std::ifstream ifs( "in_f1.txt" );
    std::fstream ofs( "out_f1.txt" );
    char c;
    char previous_c;

// squeeze whitespace

   std::string word;
   ifs >> word;
   ofs << word;

   while (ifs)
    {
        if (c==' ')
        {
         ofs.put(c);
           while (c==' '&&ifs)
           {
            ifs.get (c);
              ;}
           }
             if (c=='\v')
        {
           previous_c=c;
           while (c=='\v'&&ifs)
           {
              ifs.get (c);
              ;}
            ofs.put(previous_c);
           };

// read line

    std::string line;
    std::getline( ofs, line );

// append flag and remove 'empty lines'

    int flag = 2;

    while( getline( ofs, line ) )
    {
        if( line == " " )
        {
            flag = 2;
            continue;
        }
        cout << line << " " << flag << endl;
        flag = 0;
    }

ifs.close();
ofs.close();

}}

2 个答案:

答案 0 :(得分:1)

你正在输出流中查找一个空行, 之后将字符复制到它。一个流不是我们编辑的字符串,所以不要再考虑它了那样......

而是需要在将字符放入流之前添加逻辑。

最简单的方法是拥有一个临时流,您可以将其从输入复制到。

然后对于每一行,将临时流复制到输出流,当且仅当它包含与空格不同的字符时。

答案 1 :(得分:1)

void remove_empty_lines(std::istream& in, std::ostream& out)
{
  std::string line;
  while (std::getline(in, line))
    if (!line.empty())
      out << line << '\n';
}

N.B。这将在文件末尾添加换行符,即使原始文件中没有换行符。