1081 检查密码pat乙级

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。

输入格式:

输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。

注意: 题目保证不存在只有小数点的输入。

输出格式:

对每个用户的密码,在一行中输出系统反馈信息,分以下5种:

  • 如果密码合法,输出Your password is wan mei.
  • 如果密码太短,不论合法与否,都输出Your password is tai duan le.
  • 如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.
  • 如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.
  • 如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.

输入样例:

5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6

输出样例:

Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.

源码 

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    getchar();
// 在这段代码中,这行代码通常是用于处理输入流中的一个字符,一般是为了清除输入缓冲区中的换行符('\n')。当程序先使用了`cin`输入一个整数(如`cin>>n;`)后,输入流中可能会留下一个换行符。如果不处理这个换行符,后续的`getline(cin, s)`在读取字符串时可能会把这个换行符当作第一个输入,导致错误的输入结果。通过调用`getchar()`,可以读取并丢弃这个换行符,确保后续的输入操作能够正确地从用户那里获取所需的数据。
    // 输入密码个数 n,并读取换行符

    for(int i=0;i<n;i++)
    {
        string s;//在 C++ 中,虽然string类型并不是严格意义上的数组,但是可以像数组一样通过索引来访问其中的字符。
        //例如,如果有字符串s = "hello",那么s[0]的值就是'h',s[1]的值就是'e'等等。这种特性使得在一些情况下可以方便地对字符串中的字符进行逐个处理,就如同处理数组中的元素一样。

        getline(cin,s);
// 这行代码用于从标准输入(通常是键盘输入)读取一行文本,并将其存储到字符串变量 s 中。它会读取用户输入的字符,直到遇到换行符为止。然后,将读取到的字符(不包括换行符)存储为一个字符串赋值给变量 s。这个函数在处理包含空格的字符串输入时非常有用,因为像 `cin` 这样的输入操作在遇到空格时会停止读取,而 `getline` 可以完整地读取一整行输入,包括其中的空格等字符。
        // 读取一行密码存入字符串 s

        int length = s.length();  // 计算字符串 s 的长度,并将其赋值给变量 length
        if(length<6)                 //若长度太短,直接输出
            cout<<"Your password is tai duan le."<<endl;
        else
        {
            int alphacount=0,numcount=0,othercount=0;
            // 分别用于统计字母数量、数字数量和非法字符数量

            for(int j=0;j<length;j++)
            {
                if((s[j]>='a'&&s[j]<='z')||(s[j]>='A'&&s[j]<='Z'))
                    alphacount++;
                // 如果是字母,字母数量加一

                else if(s[j]>='0'&&s[j]<='9')
                    numcount++;
                // 如果是数字,数字数量加一

                else if(s[j]!='.')
                    othercount++;
                // 如果既不是字母、数字也不是点号,非法字符数量加一
            }

            if(othercount!=0)  //存在非法字符
                cout<<"Your password is tai luan le."<<endl;
            else if(alphacount==0)   //没有字母
                cout<<"Your password needs zi mu."<<endl;
            else if(numcount ==0)   //没有数字
                cout<<"Your password needs shu zi."<<endl;
            else                   //合法
                cout<<"Your password is wan mei."<<endl;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值