Отфильтруйте числа, пробелы и все, что не является буквой, используя правильный языковой стандарт.Смотрите этот ТАК о том, что все, кроме чисел, следует рассматривать как пробел.Так что используйте mask и сделайте что-то похожее на то, что предлагает Джерри Коффин, но только для букв:
struct alphabet_only: std::ctype<char>
{
alphabet_only(): std::ctype<char>(get_table()) {}
static std::ctype_base::mask const* get_table()
{
static std::vector<std::ctype_base::mask>
rc(std::ctype<char>::table_size,std::ctype_base::space);
std::fill(&rc['A'], &rc['['], std::ctype_base::upper);
std::fill(&rc['a'], &rc['{'], std::ctype_base::lower);
return &rc[0];
}
};
И, бум!Ты золотой.
Или ... ты мог бы просто сделать трансформацию:
char changeToLetters(const char& input){ return isalpha(input) ? input : ' '; }
vector<char> output;
output.reserve( myVector.size() );
transform( myVector.begin(), myVector.end(), insert_iterator(output), ptr_fun(changeToLetters) );
Который, к сожалению, гораздо проще поймать, но не так эффективно, как идея Джерри.1013 *
Редактировать:
Изменено «Z» на «[», так что значение «Z» заполняется.Аналогично с 'z' до '{'.