PTA天梯赛——检查密码C++

在这里插入图片描述
一,分析题目
我的目的是检查密码合法性,满足的条件有: 密码长度>=6 密码组成只能由英文字母和数字和小数点 密码必须含有字母和数字
二,思路寻找
清楚我的目的之后,看到输入格式,第一行输入一个正整数n,我看到了这个正整数的大小<=100,放心大胆的定义int类型,但是随后要输入n行用户设置的密码,我在这里的时候疑问频出,我看到输入输出样例,第一反应是我先把所有自行设置的n条密码输入,然后再输出(但是经过求证,在PTA检测代码时,可以将密码一个个判断,输入一条密码然后判断一条可以通过),第一个疑问解除;密码怎么输入呢?字母数字小数点都有,只能定义字符串类型string,输入呢?最最麻烦的是密码串可以包含空格,cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符,即碰到分隔符,表示一个输入的结束。所以排除cin输入,getline():接受字符串输入,可接受空格,需要#include ,这时就选定getline作为输入;怎么判断呢?将字符串的长度求出,用循环一个字符的进行判断,根据条件输出相应的句子。
三,代码如下

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n;
    cin >> n;
    getchar();
    while(n --)
    {
        string s;
        getline(cin, s);
        
        int alpha = 0, num = 0, dot = 0, illegal = 0;
        for (int i = 0; i < s.size(); i ++)
        {
            if(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z') alpha ++;
            else if(s[i] >= '0' && s[i] <= '9') num ++;
            else if(s[i] == '.') dot ++;
            else illegal ++;
        }
        
        if(s.size() < 6) cout << "Your password is tai duan le." << endl;
        else if(illegal) cout << "Your password is tai luan le." << endl;
        else if(alpha && !num) cout << "Your password needs shu zi." << endl;
        else if(!alpha && num) cout << "Your password needs zi mu." << endl;
        else if(alpha && num) cout << "Your password is wan mei." << endl;
    }
    
    return 0;
}

这里着重解释一下cin>>n;之后为何要getchar()一下,首先看一下我给出的截图:
在这里插入图片描述
我开始输入2,意味着我要输入两条密码,但是我输入2以后敲回车,代码立马将回车当作第一条密码处理了,可不可以输入2以后直接出入第一条密码,题上明确指出,输入n以后要换行,所以必须要用getchar()吃掉回车,以至于程序运行正常!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值