如何检查除C ++中的' - ','_','。','@'之外的字符串中是否存在任何SYMBOL?

时间:2015-02-05 13:47:06

标签: c++

我现在正在编写Email Validator,我想检查字符串是否包含任何符号(不是数字或字符),除了' - ',' _' ,'。',' @'。如果它不包含,我必须提出名为" counter"。

的变量

这是我到目前为止所尝试的:

for (int i = 0; i < mail.length(); i++) {
        if ((mail[i] >= 'A' && mail[i] <= 'Z') || (mail[i] >= 'a' && mail[i] <= 'z') || (mail[i] >= '0' && mail[i] <= '9') || (mail[i] == '.' || mail[i] == '-') || (mail[i] == '@' || mail[i] == '_')) {
            if(i == mail.length()) {
                counter+=1;
                break;
            } 
        }
    }

2 个答案:

答案 0 :(得分:3)

您只需检查您的套装中是否有符号:

size_t pos = mail.find_first_not_of( "-_.@" );
if( pos != std::string::npos )
    ++counter;

如果整个字符串中没有任何符号来自该集合,则此代码会增加计数器一次,即它是基于问题描述而不是您的代码,它会尝试计算不是来自该集合的符号数。

答案 1 :(得分:0)

您可以使用boost来使用正则表达式。如果我正确理解了您的问题,您需要检查不包含字母,数字和“-_。@”的字符串。示例实现如下所示。根据您的需求调整代码:

// std
#include <iostream>
using namespace std;
// boost
#include <boost/regex.hpp>

int main () {
    unsigned int counter = 0;
    // ... my code ...
    string myString = "foo%1@.com";
    boost::regex myRegex("[^a-zA-Z_.@-]+");
    if (boost::regex_search(myString, myRegex)) {
        counter++;
    }
   // ... my code ...
    return 0;
}

<强>更新

为了编译代码,您需要安装boost库。您无需全部安装。只需确保安装libboost-regex即可。对于编译,您可以使用以下命令链接必要的boost库:

g++ -o main main.cpp -lboost_regex