c++ - 从字符串c++中删除非字母字符

标签 c++ string idioms

这把我逼到了墙边。

template<typename t>
void Tree<t>::readFromFile(string filename)
{
//
    str.erase( remove_if(str.begin(), str.end(), aZCheck), str.end());
//
}
template<typename t>
bool Tree<t>::aZCheck(char c)
{
    if (isalpha(c))
        return false;
    else return true;

}

给出错误:cannot convert 'Tree<t>::aZCheck<std::basic_string<char> >' from type 'bool (Tree<std::basic_string<char> >::)(char)' to type 'bool (Tree<std::basic_string<char> >::*)(char)'|

在我将这两个方法移到类中之前工作正常。

str.erase( remove_if(str.begin(), str.end(), isalpha), str.end());

不使用静态转换就无法工作,我使用的是 cctype 或 ctype.h 库,静态转换适用于我未使用的 c++ 语言环境库。

我可以使用静态转换让它工作,但我似乎无法将其设为负值 !isalpha . 因为我需要删除非字母字符,所以它会删除字母字符。迫使我创建单独的方法,这是我提到的第一个问题。在我将方法移入类之前,它一直有效。

很可能我遗漏了一些非常明显的东西,但我就是想不通......

最佳答案

将函数声明为静态成员函数

static bool aZCheck(char c);

考虑到函数可以定义得更简单

template<typename t>
inline bool Tree<t>::aZCheck( char c )
{
    return isalpha( (unsigned char )c );

}

关于c++ - 从字符串c++中删除非字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918841/

相关文章:

c++ - 如何在不先定义 union 的情况下将 union 作为函数参数传递?

php - 如何获得 789 之前所有可能的数字组合?

c - C 中的动态多维字符串数组

c - 这个 C 习语是什么(if (1))?

arrays - 缺少对数组常量的支持的解决方法?

c++ - FixedSize 的小部件可以随意改变它们的大小

c++ - 使用 C++ 更新 XML 节点值

sql - INSERT 上的格式字符串大小写?

python - 在Python中创建同级文件名

c++ - 数据 C++ 的二进制表示显示的数据不正确