Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用“时,如何检查字符串是否没有特定符号?”;任何一个“U”字;?_C++_String_Algorithm - Fatal编程技术网

C++ 使用“时,如何检查字符串是否没有特定符号?”;任何一个“U”字;?

C++ 使用“时,如何检查字符串是否没有特定符号?”;任何一个“U”字;?,c++,string,algorithm,C++,String,Algorithm,我试图检查一个字符串,看看它是否满足所有要求,其中一个要求是没有'*'或'%'。使用std::any_of检查整个字符串,并使其与isupper和islower一起工作,但无法计算出这两个字符的值 到目前为止,我所拥有的样本,第三个if语句是我所得到的 if(std::any_of(nPass.cbegin(), nPass.cend(), ::isupper)) { if(std::any_of(nPass.cbegin(), nPass.cend(), ::islower) )

我试图检查一个字符串,看看它是否满足所有要求,其中一个要求是没有
'*'
'%'
。使用
std::any_of
检查整个字符串,并使其与
isupper
islower
一起工作,但无法计算出这两个字符的值

到目前为止,我所拥有的样本,第三个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
      }
   }
}

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

这是一个演示程序

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

我认为字符串必须同时包含大写和小写字母。如果只检查字母字符,则可以使用
::isalpha

您熟悉lambda函数吗?另外,
std::isalpha
是您想要使用的函数,而不是单独调用
isupper
islower
。我认为使用
和&
更具可读性,对于使一个日期
如果
sSo的条件,具体的标准是什么?一个好的字符串应该是什么,这是令人困惑的。除了您指定的两个字符外,它是否都是字母顺序和任何特殊字符?我认为你没有将你想要的标准转化为正确的逻辑。你的问题似乎是检查密码很难记住,但很容易破解:非常感谢,它成功了!但是我找不到一个很好的解释来解释什么是
std::string::npos
,或者为什么在最后添加它会起作用。同样的要求是,如果这两个特殊字符出现在“密码”中,那么它是无效的,不是所有特殊字符都被省略。@Raymond成员函数返回找到的符号的位置。如果找不到符号,函数将返回值std::string::npos,该值等于std::string::size_type(-1)。
false
false
false
false
true