C++ 如何检查字符串是否包含以下所有内容:数字、字母和特殊字符?
我正在尝试构建一个简单的密码验证程序: 程序打印C++ 如何检查字符串是否包含以下所有内容:数字、字母和特殊字符?,c++,C++,我正在尝试构建一个简单的密码验证程序: 程序打印 如果密码少于8个字符和所有数字,“非常弱” 如果密码少于8个字符和所有字母,则为“弱” 如果密码包含8个或更多字符,并且包含数字和字母,则为“Strong” 如果密码包含8个或更多字符,并且包含数字、字母和特殊字符,则为“非常强” 如您所见,我知道如何检查字符串是否有三种类型的字符之一。 如何检查字符串是否有两个或全部三个 #include <iostream> #include <ctype.h> #include
- 如果密码少于8个字符和所有数字,“非常弱”
- 如果密码少于8个字符和所有字母,则为“弱”
- 如果密码包含8个或更多字符,并且包含数字和字母,则为“Strong”
- 如果密码包含8个或更多字符,并且包含数字、字母和特殊字符,则为“非常强”
#include <iostream>
#include <ctype.h>
#include <cstring>
int main()
{
std::cout << "Enter your new password: ";
std:: string password{};
std::cin >> password;
bool veryweak;
bool weak;
bool strong;
bool verystrong;
if (password.length() < 8)
{
for (int i = 0; i < password.length(); i++)
{
if (isdigit(password[i]))
{
veryweak = true;
}
else if (isalpha(password[i]))
{
weak = true;
}
}
}
else if (password.length() >= 8)
{
for (int i = 0; i < password.length(); i++)
{
//if (password has digits and alphabets)
//strong = true;
//if (password has digits and alphabet and special characters)
//verystrong = true;
}
}
else
{
std::cout << "Password is invalid.";
}
//---------------------------------------------------------------------------------------------------------------------
if (veryweak)
{
std::cout << "Your password is very weak.";
}
else if (weak)
{
std::cout << "Your password is weak.";
}
else if(strong)
{
std::cout << "Your password is strong.";
}
else if (verystrong)
{
std::cout << "Your password is very strong.";
}
return 0;
}
#包括
#包括
#包括
int main()
{
std::cout>密码;
布尔·韦里韦克;
布尔弱;
布尔斯特朗;
布尔·维里斯特朗;
if(password.length()<8)
{
对于(int i=0;i=8)
{
对于(int i=0;i std::cout为什么不使用一些计数器,比如弱点计数器之类的。对于每个满足的属性,计数器都会增加一个。最后,您会检查满足了多少属性,并在此之后对密码强度进行评分
此外,我建议您为每个属性编写自己的函数,如:
bool containsNumbers(string pw);
bool containsLetters(string pw);
在这种情况下,通过新属性等更容易阅读、更改和扩展代码
我希望我能帮助你
问候:)我想介绍一下布尔人:
- 短密码
- 容器数量
- 容器性输卵管炎
- 包含特殊字符
你写不出来
std::string passwortStrengt () {
if (isShortPassword && !containsAlphabet && !containsSpecialCharacters) {
return "weak";
//forumlate all cases as you did in prosa up above
} else if (...) {
} else if (...) {
}
return "weak"; // just in case you missed a case above
}
您可以为每种类型(3种类型)使用一个布尔返回函数,然后使用ifFirst check检查所需内容,然后检查字符,然后检查特殊字符您的“非常弱”和“弱”检测被破坏。如果任何字符都符合条件,则会触发短密码,而不是所有字符都符合条件。事实上,在循环完成后,您可以很容易地看到密码既弱又非常弱,而实际上两者都不是。坦率地说,您缺少了一个核心状态:少于8个字符。仅此一项就应该具有唯一的状态。我建议解释编辑您的代码。感谢您的更正/建议。我意识到问题在于程序设计。实际上,我可以通过更改密码验证方式来解决这个问题,正如@schorsch312和@J W所建议的那样,使用我已经知道的方法。@PraveenGunasekaran提示:!(isdigit | isalpha)可能值得研究。