【发布时间】:2011-02-24 23:51:26
【问题描述】:
我正在编写一个函数来确定字符串是否仅包含字母数字字符和空格。我正在有效地测试它是否匹配正则表达式 ^[[:alnum:] ]+$ 但不使用正则表达式。这是我目前所拥有的:
#include <algorithm>
static inline bool is_not_alnum_space(char c)
{
return !(isalpha(c) || isdigit(c) || (c == ' '));
}
bool string_is_valid(const std::string &str)
{
return find_if(str.begin(), str.end(), is_not_alnum_space) == str.end();
}
有没有更好的解决方案,或者“更多 C++”的方式来做到这一点?
【问题讨论】:
-
我看不出有什么不是 C++ 的。你介意告诉我们吗?
-
@Mads:你看,我不确定它是否足够 C++!我来自 C 背景,每次我提出问题并提供“太 C 而 C++ 不足”的代码时,我都会被谋杀。
-
那么,谋杀回来。至少这段代码没有错。 C++ 是一种多范式语言,没有一种风格比其他风格更正确。任何试图以不同方式告诉你的人,都不知道他们在说什么。如果您喜欢元编程,请使用模板。如果您喜欢过程式编程,请使用函数重载等基本功能。如果您喜欢 OO 代码,请使用继承。或者混搭。
-
但请务必使用 RAII,而不是显式管理资源并将自己暴露在泄漏中。
-
我也想避免双重否定:使用
find_if_not并将函数重命名为is_alnum_space并删除返回的!