当前位置: 首页 > news >正文

【练习】PAT 乙 1081 检查密码

题目

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于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.

来源:PAT 乙 1081 检查密码


思路(注意事项)

注意不能用cin,因为输入的字符串可能会有空格。(题目只说了字符串不会是空的,但是没有说不会有空格。。。)


纯代码

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


int main(){
	int n;
	cin >> n;
	cin.ignore();
	while(n --){
		string s;
		getline(cin, s);
		
		if (s.size() < 6) {
			cout << "Your password is tai duan le." << endl;
			continue;
		}
		
		int num = 0, c = 0, d = 0;
		for(int i = 0; i < s.size();  i++){
			if (isdigit(s[i])) num ++;
			else if (isalpha(s[i])) c ++;
			else if (s[i] == '.') d ++;
 		}
 		if(num + c + d != s.size()) cout << "Your password is tai luan le." << endl;
 		else if (num == 0) cout << "Your password needs shu zi."  << endl;
 		else if (c == 0) cout << "Your password needs zi mu." << endl;
		else cout << "Your password is wan mei." << endl;
	}
	
	return 0;
} 

题解(加注释)

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

int main() {
    int n; // 定义变量 n,表示输入的密码数量
    cin >> n; // 输入密码的数量
    cin.ignore(); // 忽略输入 n 后的换行符,避免影响后续的 getline 读取

    while (n --) { // 循环处理每个密码
        string s; // 定义字符串 s,用于存储当前密码
        getline(cin, s); // 读取一行输入作为密码

        // 检查密码长度是否小于 6
        if (s.size() < 6) {
            cout << "Your password is tai duan le." << endl; // 输出密码太短的提示
            continue; // 跳过当前密码的后续检查
        }

        int num = 0, c = 0, d = 0; // 定义变量 num(数字数量)、c(字母数量)、d(点号数量)
        for (int i = 0; i < s.size(); i++) { // 遍历密码的每个字符
            if (isdigit(s[i])) num++; // 如果字符是数字,num 加 1
            else if (isalpha(s[i])) c++; // 如果字符是字母,c 加 1
            else if (s[i] == '.') d++; // 如果字符是点号,d 加 1
        }

        // 检查密码中是否包含非法字符(非数字、非字母、非点号)
        if (num + c + d != s.size()) {
            cout << "Your password is tai luan le." << endl; // 输出密码包含非法字符的提示
        }
        // 检查密码是否缺少数字
        else if (num == 0) {
            cout << "Your password needs shu zi." << endl; // 输出密码缺少数字的提示
        }
        // 检查密码是否缺少字母
        else if (c == 0) {
            cout << "Your password needs zi mu." << endl; // 输出密码缺少字母的提示
        }
        // 如果密码符合要求
        else {
            cout << "Your password is wan mei." << endl; // 输出密码完美的提示
        }
    }

    return 0; // 程序正常结束
}

相关文章:

  • 【Golang那些事】go1.22和1.23 更新重点及测评
  • nginx性能优化有哪些方式?
  • OpenNJet:下一代云原生应用引擎,支持动态配置与高效管理,简化运维任务,提升应用灵活性与安全性。
  • Sring Boot整合Minio实现图片上传功能
  • Web3 环境下用户数据隐私保护的技术方案分析
  • 【初学者】谈谈DeepSeek使用的算法?
  • 合法C标识符查(信息学奥赛一本通-1134)
  • 告别“人工智障”!给小米音箱“开个挂”?(接入各类AI大模型,让小爱同学秒变全屋智能AI中枢!)
  • 深入解析 Linux 声卡驱动:从架构到实战
  • 《深度学习》—— YOLOv1
  • 【Python数据分析+可视化项目案例】:亚马逊平台用户订单数据分析
  • pytorch3d学习(五)——批量输出图片+对渲染器的位姿解读+npy文件解读
  • 基于django的线上教育平台大数据分析-spark+spider+vue
  • 交易所系统平台开发流程及核心优势解析
  • 记录 macOS 上使用 Homebrew 安装的软件
  • Fragment与React.StrictMode一起使用时有什么需要注意的?
  • 佳能(Canon)摄像机断电dat文件0字节的恢复方法
  • WRF/Chem在线耦合模式:大气污染模拟的时空密码—从气象场驱动到化学反馈的全过程解析
  • Java开发经验——Throwable/Exception异常处理方式
  • Innodb的索引结构和MyISAM有区别吗
  • 王毅谈中拉论坛第四届部长级会议重要共识
  • 中国巴西民间推动建立经第三方验证的“森林友好型”牛肉供应链
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 长三角议事厅·周报|从模速空间看上海街区化AI孵化模式
  • 哈佛新论文揭示 Transformer 模型与人脑“同步纠结”全过程!AI也会犹豫、反悔?
  • 普京提议无条件重启俄乌谈判,外交部:我们支持一切致力于和平的努力