调试断言性病失败::抹去

问题描述:

我正在写一个程序来解析日志文件,并决定要为C++有关越好,我被击中了与调试断言这条线 -调试断言性病失败::抹去

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

Assertion that character must lie between -1 and 256

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

The offending character

所以,我想这

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. 下面的代码将工作,如果你只是想删除空格字符

    sLine.erase(标准::的remove_if(sLine.begin(),sLine.end(),[](字符C){ return(c ==''); }),sLine.end());

+0

2.噢,是的,我应该扭转这些迹象。我愚蠢。来自“简明英汉词典”工作正常,这个断言是由isspace引发的,而不是标准库,正如我想的那样。谢谢! –