解题思路:
题目要求:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
这里不需要用到数组,用一个字符变量即可,节省空间提高效率
char ch;
//x 代表包含大写字母 y 代表包含小写字母
//z 代表包含数字 k 代表包含特殊字符
int x = 0, y = 0, z = 0, k = 0;
当当前字符符合那四个条件中的一个,相应的条件变量x,y,z,k就会等于 1,表示包含当输入换行符结束输入,也就是要判断yes或no了
最后判断 x+y+z+k的和是不是大于等于3,即x+y+z+k>=3
只要>=3,就说明是一定满足包含三个或者四个条件的
也还要判断密码位数是否符合条件就可以了
注意事项:
参考代码:
#include<iostream>
using namespace std;
//判断当前字符是不是符合第四个条件,即判断当前字符是不是特殊符号,是就返回1,否则返回0
int f(char a){
if (a == '~' || a == '!' || a == '@' || a == '#' || a == '$' || a == '%' || a == '^'){
return 1;
}
else{
return 0;
}
}
int main(){
int n;//输入多少个字符串的个数
while ((scanf("%d", &n))!= EOF){
getchar();//吃掉输入数字按下回车的字符,否则如输入3,按下回车后,到下面输入ch的时候,ch接收的就是‘\n’了,就相当于 ch='\n';
for (int i = 1; i <= n; i++){
char ch; //用于判断的字符
int sum = 0;//计算字符的个数,输入一个就+1
//x 代表包含大写字母 y 代表包含小写字母
//z 代表包含数字 k 代表包含特殊字符
int x = 0, y = 0, z = 0, k = 0;
//依次输入每一个字符,直至遇到换行符就结束输入
while ((ch = getchar()) != '\n'){
sum++;//每输入一个字符,密码为数就+1
//判断是否包含那四个条件
if ((ch >= 'a'&&ch <= 'z')){
x = 1;
}
else if ((ch >= 'A'&&ch <= 'Z')){
y = 1;
}
else if ((ch >= '0'&&ch <= '9')){
z = 1;
}
else if (f(ch)){
k = 1;
}
}
//最后判断密码位数和是否包含3个或者四个条件
if (sum>=8&&sum<=16&&x + y + z + k >= 3){
cout << "YES\n";
}
else{
cout << "NO\n";
}
}
}
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1019 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:672 |
C语言训练-求函数值 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:644 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:913 |
核桃的数量 (C语言代码)浏览:727 |
杨辉三角 (C语言代码)浏览:505 |
前10名 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:609 |