2017-06-14 134 views
1

我正在寫一個程序來解析日誌文件,並決定要爲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
  1. 這是一個聲明來測試字符參數是否超出範圍。字符'°'(-80)不是一個ascii字符,因此它超出範圍。
  2. 我不確定你的意思,這個代碼片段刪除所有ascii字符。
  3. 下面的代碼將工作,如果你只是想刪除空格字符

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

+0

2.噢,是的,我應該扭轉這些跡象。我愚蠢。來自「簡明英漢詞典」工作正常,這個斷言是由isspace引發的,而不是標準庫,正如我想的那樣。謝謝! –