调试断言失败 std::erase

Debug assertion failed with std::erase

我正在编写一个程序来解析日志文件,并决定尽可能使用 C++,但我遇到了这一行的调试断言 -

sLine.erase(remove_if(sLine.begin(), sLine.end(), isspace), sLine.end()); 

这似乎是因为在日志文件的第 2000 行有一个值为 -80 的字符。

所以,我尝试了这个

sLine.erase(remove_if(sLine.begin(), sLine.end(), [](char c) { return c >= -1 && c<=255; }), sLine.end());

但是这段代码卡住了,没有任何解释。

所以,最后我有三个问题-

  1. 为什么需要调试断言?
  2. 第二个代码片段失败的原因是什么?
  3. 您可以建议任何解决方法吗?

感谢您的帮助!

  1. 这是一个断言,用于测试字符参数是否超出范围。字符“°”(-80) 不是 ascii 字符,因此超出范围。
  2. 我不确定你的意思,此代码片段删除了所有 ascii 字符。
  3. 如果您只想删除 space 个字符,则以下代码将起作用

    sLine.erase(std::remove_if(sLine.begin(), sLine.end(), [](char c) { return (c == ' '); }), sLine.end());