std::string::erase()
принимает либо индексную пару, либо итераторы.
Посмотрите на эту ссылку .
Здесь s[i]
дает символ, который по ошибке преобразуетсядо size_t
, поэтому, в зависимости от вашей строки, вы в основном пытаетесь удалить элемент, который не существует.
Более чистое решение:
#include <string>
#include <iostream>
#include <cstdlib>
bool should_be_removed(char c) { return (c > 'b') && (c < 'f'); }
int main()
{
std::string s;
std::cin >> s;
s.erase(std::remove_if(s.begin(), s.end(), should_be_removed), s.end());
return EXIT_SUCCESS;
}