如何检查字符串中的特殊字符?

Posted

技术标签:

【中文标题】如何检查字符串中的特殊字符?【英文标题】:How to check a String for special characters? 【发布时间】:2019-06-11 07:55:18 【问题描述】:

我正在处理 C++ 中的一个问题,这是我的问题: 我从一个对象中得到一个字符串,我想检测是否有一个不是字母数字的字符或像/($ 等特殊字符。除了问,我想不出别的办法

if (Text.Pos("A") > 0)

if (Text.Pos("B") > 0)

.....

是否有更快的标准方式/方法?

【问题讨论】:

如果您使用的是std::string,那么您可以使用它的find_first_not_of() 方法。但是你显然没有使用std::string,所以你必须看看你选择的字符串类(它到底是什么?)是否有一个现成的函数来做类似的事情。如果没有,您将不得不遍历字符串手动测试每个字符,直到找到符合您条件的字符。 请提供minimal reproducible example 【参考方案1】:

我假设您提出的解决方案是检查所有字母数字字符是否都在字符串内。此方法行不通,因为您还必须考虑字符串的长度,因为可能会得到一个包含所有字母数字字符和一个特殊字符的字符串。

没有嵌套数千个 if 语句来检测非字母数字字符,这是一个有效的解决方案:

(我假设 Text can be iterated over,使用基于范围的 for 循环)

你可以使用std::find_if

#include <algorithm>
#include <iterator>
#include <cctype>
#include <iostream>

auto it = std::find_if(std::begin(Text), std::end(Text), [](const char c) 
    return std::isalnum(c) == 0; // Not alphanumeric
);

if (it == std::end(Text)) 
    std::cout << "Text is fine!";

 else 
    std::cout << "Text contains non-alphanumeric character: '" << *it << "'";


std::cout << std::endl;

【讨论】:

这仅适用于Text 的类型具有提供对单个字符的访问的迭代器。即便如此,问题还是要求“不是字母数字或特殊字符”。 @PeteBecker,迭代器的要点。 OP 可以在他认为合适的情况下消除该部分的歧义。关键是遍历“字符串”的内容。 “...or a special character like /, (, $”。特殊字符不是字母数字,所以我只检查非字母数字

以上是关于如何检查字符串中的特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何转义xml中的特殊字符

如何在 JavaScript 中检查字符串是不是包含数字和特殊字符?

如果我想使用 char 检查 Java 中的特殊字符怎么办?

在 VC++ Float 数据类型值中,如何检查字符串或特殊字符是不是没有混合

如何使用正则表达式检查用户输入是不是仅包含特殊字符?

在不验证文件路径的情况下检查文件名中的无效字符(特殊字符和国际字符)