gpt4 book ai didi

c++ - 从字符串中删除空行c++

转载 作者:行者123 更新时间:2023-11-30 04:07:37 29 4
gpt4 key购买 nike

我试图删除从文件列表中删除一个人时创建的空行,以便我的文件在打开时看起来更漂亮。这是我必须删除该行的代码。

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 

最佳答案

你不应该只删除所有的\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

关于c++ - 从字符串中删除空行c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395333/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com