1

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

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

断言字符必须介于 -1 和 256 之间

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

冒犯的角色

所以,我试过这个

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

但是这个代码片段没有解释就卡住了。

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

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

谢谢你的帮助!

4

1 回答 1

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

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

于 2017-06-14T06:49:54.193 回答