首页 > 解决方案 > 使用“any_of”时如何检查字符串是否没有特定符号?

问题描述

我正在尝试检查一个字符串以查看它是否满足所有要求,其中一个要求是没有'*''%'。用于std::any_of检查整个字符串并使其正常工作,isupperislower无法弄清楚这两个字符。

到目前为止我所拥有的样本,第三个 if 语句是我所得到的。

if(std::any_of(nPass.cbegin(), nPass.cend(), ::isupper))
{
   if(std::any_of(nPass.cbegin(), nPass.cend(), ::islower) ) 
   {
      if(std::any_of(nPass.cbegin(), nPass.cend(), ::!='*'))
      {
           return true; // returns true if all criteria is met
      }
   }
}

标签: c++stringalgorithm

解决方案


第三次检查不需要使用算法 std::any_of 。你可以使用find_first_of类的方法std::string

这是一个演示程序。

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

bool check( const std::string &s )
{
    return std::any_of( std::begin( s ), std::end( s ), ::isupper ) &&
           std::any_of( std::begin( s ), std::end( s ), ::islower ) &&
           s.find_first_of( "*% " ) == std::string::npos;
}

int main() 
{
    std::cout << std::boolalpha << check( "A" ) << '\n';
    std::cout << std::boolalpha << check( "a" ) << '\n';
    std::cout << std::boolalpha << check( "Aa%" ) << '\n';
    std::cout << std::boolalpha << check( "Aa*%" ) << '\n';
    std::cout << std::boolalpha << check( "Aa" ) << '\n';

    return 0;
}

它的输出是

false
false
false
false
true

我想字符串必须同时包含大写和小写字母。如果您只检查字母字符,那么您可以使用::isalpha.


推荐阅读