我正在尝试删除从文件列表中删除某人时创建的空行,这样我的文件在打开时看起来更好。这是Code我必须删除该行。
std::ifstream ifs("alpha.dat");
std::ofstream tem("temporary.text");
std::string str((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>());
str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
cout << str;
tem << str;
tem.close();
ifs.close();
我的文件内容如下:
maria hernandez 1000 h3777 +1000 19:15:19
rachel dominguez 100000 X8793 +100000 19:15:20
carlos yatch 20 g6386 +20 19:15:20
Empty line
carlos Domingues 20 g3336 +20 19:15:20
Empty Line
但是我在文件上得到的是当前的内容:
maria hernandez 1000 h3777 +1000 19:15:19 rachel dominguez 100000 X8793 +100000 19:15:20 carlos yatch 20 g6386 +20 19:15:20
答案 0 :(得分:3)
您不应该删除所有\n
。它们不代表空白行,而是换行符的开头。当你连续多次\n
时,你得到一个空白。
要删除这些连续\n
个字符,我建议替换:
str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
有这样的事情:
str.erase(std::unique(str.begin(), str.end(),
[] (char a, char b) {return a == '\n' && b == '\n';}),
str.end());
工作示例here。
std::unique
删除相等的连续元素。但是因为我们只想删除换行符,所以我们将lambda作为谓词传递。最后,我们只需要删除移动到容器末尾的重复\n
。
答案 1 :(得分:0)
要删除空白行,您需要确保删除多余的\r
并将其全部变为\n
,同时确保不会意外添加行({'\r', '\n'}
) ,然后删除重复项是一项简单的任务。
答案 2 :(得分:0)
查找两次发生的回车,并删除一次。
size_t pos;
while ((pos= str.find("\n\n", 0)) != std::string::npos)
{
str.erase(pos, 1);
}
运行here
答案 3 :(得分:-1)
/* Processing of text lines the method length()
The search for the longest line of the text.
Removing of the particular line of text.
The first step.
Write a function to find the empty line of the text file:*/
//------------------------------------------------------------
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int Find();
void Remove( int k);
//------------------------------------------------------------
int main()
{
cout << "blank line no "<<"is: "<<Find()<<endl;
Remove(Find());
return 0;
}
//------------------------------------------------------------
int Find()
{
int nr = 0; string ilg = "";
int n = 0; string eil;
ifstream fd("Data.txt");
while (!fd.eof()) {
getline(fd, eil);
for(int i=0;i<n;i++)
{
if (eil.length() == 0) {
nr = n; ilg = eil;}
}
n++;
}
fd.close();
return nr;
}
//---------------------
/*The second step. Write a function to remove the given line:*/
//------------------------------------------------------------
void Remove( int k)
{
string eil;
ofstream fr("Result.txt");
ifstream fd("Data.txt");
// The lines are copied till the removed
for (int i = 0; i < k; i++) {
getline(fd, eil);
fr << eil << endl;
}
// The line, which has to be removed, is not copied
getline(fd, eil);
// The remaining lines are copied
while (!fd.eof()) {
getline(fd, eil);
fr << eil << endl;
}
fd.close();
fr.close();
}
//---