Другие ответы решили конкретную проблему, которая у вас есть, но вы должны знать, что существуют разные подходы для решения вашей актуальной проблемы: стереть элементы, которые заполняют условие .Это может быть легко решено с помощью удаления / стирания идиомы:
// C++0x enabled compiler
str.erase(
std::remove_if( str.begin(), str.end(),
[](char ch) { return !isalpha(ch) && !isdigit(ch) && ch != '-' } ),
str.end() );
Хотя это может показаться громоздким на первый взгляд, если вы уже видели его пару раз, это уже не удивительно, и это эффективный способ удаления элементов из вектора или строки.
Если ваш компилятор не поддерживает лямбда-выражения, вы можете создать функтор и передать его в качестве третьего аргумента remove_if
:
// at namespace level, sadly c++03 does not allow you to use local classes in templates
struct mycondition {
bool operator()( char ch ) const {
return !isalpha(ch) && !isdigit(ch) && ch != '-';
}
};
// call:
str.erase(
std::remove_if( str.begin(), str.end(), mycondition() ),
str.end() );