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