确定字符串是否仅包含字母数字字符(或空格)

新手上路,请多包涵

我正在编写一个函数来确定字符串是否仅包含字母数字字符和空格。我正在有效地测试它是否匹配正则表达式 ^[[: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++”方法来做到这一点?

原文由 dreamlax 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 892
2 个回答

对我来说看起来不错,但您可以使用 isalnum(c) 而不是 isalphaisdigit

原文由 jopa 发布,翻译遵循 CC BY-SA 2.5 许可协议

期待 C++0x,您将能够使用 lambda 函数(您可以使用 gcc 4.5 或 VS2010 进行尝试):

 bool string_is_valid(const std::string &str)
{
    return find_if(str.begin(), str.end(),
        [](char c) { return !(isalnum(c) || (c == ' ')); }) == str.end();
}

原文由 R Samuel Klatchko 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题