题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//三个限制 那就设置三个步骤即可
bool fun1(string str)
{
//长度必须超过八位
if (str.length() <= 8)
{
return false;
}
//要有大小写字母,数字,其他字符至少三种
//可不可以用ascII码来进行区分
int count = 0; //设置一个数字标志位 用来确定是否已经使用了数字
int Icount = 0;//大写标志位
int icount = 0;//小写
int xcount = 0;//其他标志位
for (int i = 0; i < str.length(); i++)
{
//把标志位判断放到外面的if 可能会导致其他字符那里出现问题
//为数字
if ((*(str.substr(i,1).data())>='0')
&& (*(str.substr(i, 1).data()) <= '9'))
{
if (count == 0)
{
count=1;
}
continue;
}
//为大写字母
else if ((*(str.substr(i, 1).data()) >= 'A')
&& (*(str.substr(i, 1).data()) <= 'Z'))
{
if (Icount == 0)
{
Icount=1;
}
continue;
}
//为小写字母
else if ((*(str.substr(i, 1).data()) >= 'a')
&& (*(str.substr(i, 1).data()) <= 'z'))
{
if (icount == 0)
{
icount = 1;
}
continue;
}
//为其他字符
else if ((*(str.substr(i, 1).data()) != ' ')
&& (*(str.substr(i, 1).data()) != '\n')
&& xcount == 0)
{
xcount = 1;
continue;
}
//判断是否已经满足条件了 不需要继续往后判断了
if ((count + icount + Icount + xcount) >= 3)
{
break;
}
}
if ((count + icount + Icount + xcount) < 3)
{
return false;
}
//不能有长度大于2的包含公共元素的子串重复 不能有3以及以上的
//遍历
string strdata;
for (int i = 0; i < str.length()-3; i++)
{
strdata = str.substr(i, 3);
for (int j = i+1; j < str.length()-3; j++)
{
if (strdata == str.substr(j,3))
{
return false;
}
}
}
return true;
}
int main()
{
string str;
while (cin >> str)
{
bool iftrue = fun1(str);
if (iftrue)
{
cout << "OK" << endl;
}
else
{
cout << "NG" << endl;
}
}
system("pause");
return 0;
}
查看15道真题和解析