牛客网&&华为机试&&密码验证合格程序
代码实现
#include<iostream>
#include<string>
#include<cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
bool JudgeTypenum(string str, int len)
{
bool digitflag = false;
bool upflag = false;
bool lowflag = false;
bool otherflag = false;
int result = 0;
for (int i = 0; i < len; ++i)
{
//if (digitflag == false && isdigit(str[i]) == true) err!!!
if (!digitflag && isdigit(str[i]))
{
digitflag = true;
result = result + 1;
}
else if (!upflag && isupper(str[i]))
{
upflag = true;
result = result + 1;
}
else if (!lowflag && islower(str[i]))
{
lowflag = true;
result = result + 1;
}
else if(!otherflag && !isspace(str[i]) )
{
otherflag = true;
result = result + 1;
}
if (result >= 3) //可提前结束判断
return true;
}
return false;
}
bool JudgeRelen(string str, int len)
{
int index1 = 0;
int index2 = 0;
int i = 0;
int j = 0;
for (i = 0; i < len - 6; ++i) //细节!!!若要符合条件后面起码需要6个字符
{
for (j = i + 1; j < len - 2; ++j) //细节!!!数组下标不能越界。
{
if (str[i] == str[j] && str[i + 1] == str[j + 1] && str[i + 2] == str[j + 2]) //超过2那就是大于等于3
return false;
}
}
return true;
}
int main()
{
int len = 0;
string str;
while (cin >> str)
//while(getline(cin, str))
{
len = str.size();
if (len > 8 && JudgeTypenum(str, len) && JudgeRelen(str, len)) //超过是大于号!!!
{
cout << "OK" << endl;
}
else
cout << "NG" << endl;
}
return 0;
}
编程笔记
- 代码实现解题思路:根据题目要求一步一步判断,注意“超过”的意思是“大于”的意思!!!
- 代码if( isdigit(str[i]) == true);会出现警告 C4805 “==”: 在操作中将类型“int”与类型“bool”混合不安全。但是可以分开操作,bool flag = false; flag = isdigit(str[i]); if( flag == true);经验证是没问题的,但其实没必要执行此操作。
- 熟悉字符库