【问题标题】:how to remove these empty lines如何删除这些空行
【发布时间】:2015-05-10 17:10:18
【问题描述】:

我可以检测到文本中的空行,但不知道如何删除它 请你能给我一些提示如何删除检测到的行

#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();

}}

【问题讨论】:

  • 你也想检测重复行吗?
  • 创建一个新文件,将除要删除的文本之外的所有文本写入该新文件,删除原始文件并将新文件重命名为原始文件。
  • 你的缩进很糟糕。在访问之前不要设置c。如果文件的第一行是空白怎么办?
  • @Poldie 不只有这些空行,非常感谢你们,

标签: c++ removing-whitespace


【解决方案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';
}

注意即使原始文件中没有换行符,这也会在文件末尾添加一个换行符。

【讨论】:

  • 它只是给出输入文件中的第一个单词,输出文件,我不明白为什么
  • 那你用错了。打开两个 fstream 对象,将它们传递给函数。就这样。没有别的了。
【解决方案2】:

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

相反,您需要在将字符放入流之前添加逻辑。

最简单的方法是创建一个临时流,将其从输入复制到。

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

【讨论】:

  • 不需要临时流,只需使用std::string
  • 其实我是 C++ 新手刚开始学习非常感谢你们,我会尝试这样做
  • 您真的应该使用 std::string 查看@JonathanWakely 的答案。并给他接受的答案!它在换行符之间读取输入流的内容,并将这些字符放在一个字符串中。字符串可以很容易地操作,或者测试为空。 - 他这样做,然后将字符传输到输出流,如果该行不为空。
猜你喜欢
  • 1970-01-01
  • 2014-04-03
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多