Как проверить, не имеет ли строка указанный c символ при использовании «any_of»? - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь проверить строку, чтобы увидеть, соответствует ли она всем требованиям, и одно из этих требований заключается в том, что она не имеет '*' или '%'. Используя std::any_of, чтобы проверить всю строку и заставить ее работать с isupper и islower, но не могу понять это для этих 2 символов.

Пример того, что у меня есть, третий, если заявление, насколько я получил.

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
      }
   }
}

1 Ответ

2 голосов
/ 29 марта 2020

Нет необходимости использовать алгоритм 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...