Отладочное утверждение не удалось с помощью std :: erase

Я пишу программу для синтаксического анализа файла журнала, и решил быть как C ++ об этом, насколько это возможно, и я получил отладочное утверждение для этой строки —

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

Утверждение, что символ должен лежать между -1 и 256

Который, кажется, из-за символа -80 в 2000-й строке лог-файла.

Оскорбительный персонаж

Итак, я попробовал это

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 (std :: remove_if (sLine.begin (), sLine.end (), [] (char c) {
    возврат (c == »);
    }), sLine.end ());

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]