【问题标题】:Debug assertion failed with std::erase调试断言因 std::erase 失败
【发布时间】:2017-06-14 05:11:17
【问题描述】:

我正在编写一个程序来解析一个日志文件,并决定尽可能使用 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());

但是这段代码 sn-p 没有解释就卡住了。

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

  1. 为什么需要调试断言?
  2. 第二个代码sn-p失败的原因是什么?
  3. 您可以提出任何解决方法?

感谢您的帮助!

【问题讨论】:

    标签: c++ c++11 isspace


    【解决方案1】:
    1. 这是一个测试字符参数没有超出范围的断言。字符 '°' (-80) 不是 ascii 字符,因此超出范围。
    2. 我不确定你的意思,这段代码 sn-p 会删除所有 ascii 字符。
    3. 如果您只想擦除空格字符,以下代码将起作用

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

    【讨论】:

    • 2.哦,是的,我应该把标志倒过来。真傻我。 3. 工作正常,该断言是由 isspace 引发的,而不是由标准库引发的,正如我所想的那样。谢谢!
    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多