我可以检测到文本中的空行,但没有得到如何删除它 请你给我一些如何删除检测到的行的提示
#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();
}}
答案 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。这将在文件末尾添加换行符,即使原始文件中没有换行符。