筛选出数字,空格和其他任何不使用正确的语言环境的一封信。请参阅this关于将数字视为空白处理所有内容的SO线程。所以使用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));
其中,嗯,是很容易神交,只是没有杰里的想法一样高效。
编辑:
更改的 'Z' 到 '[' 以使该值 'Z' 被填充。同样用'z'到'{'。
“我知道这很奇怪” - 它不是(取决于算法的上下文)。 – 2011-01-20 13:18:55