【华为OD】 C卷真题 100%通过:密码输入检测,C++代码实现

目录

题目描述:

思路:

C++代码:


题目描述:

给定用户密码输入流input,输入流中字符'<'表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。

密码安全要求如下:

1.密码长度>=8;

2.密码至少需要包含1个大写字母;

3.密码至少需要包含1个小写字母;

4.密码至少需要包含1个数字;

5.密码至少需要包含1个字母和数字以外的非空白特殊字符

注意空串退格后仍然为空串,且用户输入的字符串不包含‘<’字符和空白字符。

输入描述

用一行字符串表示输入的用户数据,输入的字符串中‘<’字符标识退格,用户输入的字符串不包含空白字符,例如:

ABC

输出描述

输出经过程序处理后,输出的实际密码字符串,并输出改密码字符串是否满足密码安全要求。两者间由‘,’分隔, 例如:

ABc89%00,true

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

ABC

输出

ABc89%00,true

说明

解释:多余的C和0由于退格被去除,最终用户输入的密码为ABc89%00,且满足密码安全要求,输出true

思路:

        其实这道题很直白,就可以完全按照题意来依次实现即可。

长度判断 >= 8

大写字母 只要有一个就可以

小写字母 只要有一个就可以

数字  只要有一个就可以

特殊符号 只要有一个就可以

同时由于字符串中可能有退格,所以只需要把字符挨个拼接或者删除即可,需要考虑的是当为空时再删除还是空。

废话不多说,上代码:

C++代码:

#include 
#include 
#include 
using namespace std;

int main()
{
	string input;
	getline(cin, input);
	string result;
	bool isBig = false;
	bool isSmall = false;
	bool isNum = false;
	bool isSpec = false;

	for (auto & c : input) {
		if (c == '<') {
			if (result.size() > 0) result.pop_back();
		}
		else {
			result += c;
		}
	}
	for (auto &c : result) {
		if (!isNum && isdigit(c)) isNum = true;
		if (!isSmall && islower(c)) isSmall = true;
		if (!isBig && isupper(c)) isBig = true;
		if (!isSpec && !isdigit(c) && !islower(c) && !isupper(c) && c != ' ') isSpec = true;
	}
	bool flagRes = false;
	if (result.size() >= 8 && isNum && isSmall && isBig && isSpec) {
		flagRes = true;
	}
	cout << result << "," << boolalpha << flagRes << endl;
	return 0;
}

你可能感兴趣的:(华为OD_ABCD真题,华为od,c语言,c++,算法,数据结构)