目录
1. 前言
在学习C语言的死后,肯定要接触到Ascii码表,里面有很多我们认识的字符,也有一些编程常用到的转义字符,或者特殊字符。程序的编写是离不开这个表的。这个题目就是常见的密码的设置,一些转换之类常见的操作,适合新手观看。
2. 正文
2.1 问题
题目描述:
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入格式:
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出格式:
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
样例输入:
3 a1b2c3d4 Linle@ACM ^~^@^@!%
样例输出:
NO YES NO
2.2 解决办法
2.2.1 思路
由于使用的c++,我们就以c++常用的方式去实现,我们先定义容器,然后存储变量,与c语言不同的是,c++的操作没有那么麻烦,直接含有string类型,直接存储即可。
得到源数据之后,我们写一个函数去判断。得到题目中要求的输出值。值得注意的是,在开发中分文件,分函数编程是必要的,可以使得代码逻辑更清晰,更顺畅,也方便协同开发。
看完题目之后,大家还是可以现场是写一下,必经过程和思路都是最重要的。
2.2.2 代码实现
以下为代码实现,没有难以理解的地方,都是常规操作。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool isSafePassword(string &data_in)
{
bool arr[4] = {true, true, true, true};
int count = 0;
string special_c = "~!@#$%^";
if (data_in.length() > 16 || data_in.length() < 8)
{
return false;
}
for (char c : data_in)
{
if (c >= 'A' && c <= 'Z' && arr[0])
{
arr[0] = false;
}
else if (c >= 'a' && c <= 'z' && arr[1])
{
arr[1] = false;
}
else if (c >= '0' && c < '9' && arr[2])
{
arr[2] = false;
}
else if (special_c.find(c) != string::npos && arr[3])
{
arr[3] = false;
}
}
for (int i = 0; i < 4; i++)
{
arr[i] == false ? count++ : count;
}
if (count >= 3)
{
return true;
}
else
return false;
}
int main()
{
vector<string> data_in;
string temp;
int count;
cin >> count;
for (int i = 0; i < count; i++)
{
cin >> temp;
data_in.push_back(temp);
}
for (string temp : data_in)
{
if (true == isSafePassword(temp))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
2.2.3 测试结果
结果也是依旧不出意外
大家可以直接在这个线上的编译环境执行
3. 备注
>>>>>>
大家在没有逻辑的时候不要盲目的去搜索,也不要再心烦意乱的时候去硬想,不妨停下来想一想,自己到底需要什么,盲目的寻找只会更乱,适得其反。不如出去透透气,吹吹风。
>>>>>>
生活的道路一旦选定,就要勇敢地走到底,决不回头。——左拉
>>>>>>
制作不易,且行且珍惜,点个关注支持下吧。