题目描述
给定用户密码输入流 input,输入流中字符 '<' 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。
密码安全要求如下:
密码长度 ≥ 8;
密码至少需要包含 1 个大写字母;
密码至少需要包含 1 个小写字母;
密码至少需要包含 1 个数字;
密码至少需要包含 1 个字母和数字以外的非空白特殊字符;
注意空串退格后仍然为空串,且用户输入的字符串不包含 '<' 字符和空白字符。
输入描述
用一行字符串表示输入的用户数据,输入的字符串中 '<' 字符标识退格,用户输入的字符串不包含空白字符,例如:
ABC<c89%000<
输出描述
输出经过程序处理后,输出的实际密码字符串,并输出改密码字符串是否满足密码安全要求。两者间由 ',' 分隔, 例如:
ABc89%00,true
用例:
输入:ABC<c89%000<
输出:ABc89%00,true
说明:多余的C和0由于退格被去除,最终用户输入的密码为ABc89%00,且满足密码安全要求,输出true
Python 解法:
def process_input(input_str):
password = []
for char in input_str:
if char == '<':
if password:
password.pop()
else:
password.append(char)
return ''.join(password)
def is_password_safe(password):
if len(password) < 8:
return False
has_upper = any(c.isupper() for c in password)
has_lower = any(c.islower() for c in password)
has_digit = any(c.isdigit() for c in password)
has_special = any(not c.isalnum() for c in password)
return has_upper and has_lower and has_digit and has_special
if __name__ == "__main__":
input_str = input().strip()
password = process_input(input_str)
is_safe = is_password_safe(password)
print(f"{password},{is_safe}")
Java 解法:
import java.util.Scanner;
public class PasswordValidator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
scanner.close();
String password = processInput(input);
boolean isSafe = isPasswordSafe(password);
System.out.println(password + "," + isSafe);
}
private static String processInput(String input) {
StringBuilder password = new StringBuilder();
for (char c : input.toCharArray()) {
if (c == '<') {
if (password.length() > 0) {
password.deleteCharAt(password.length() - 1);
}
} else {
password.append(c);
}
}
return password.toString();
}
private static boolean isPasswordSafe(String password) {
if (password.length() < 8) {
return false;
}
boolean hasUpper = false;
boolean hasLower = false;
boolean hasDigit = false;
boolean hasSpecial = false;
for (char c : password.toCharArray()) {
if (Character.isUpperCase(c)) {
hasUpper = true;
} else if (Character.isLowerCase(c)) {
hasLower = true;
} else if (Character.isDigit(c)) {
hasDigit = true;
} else {
hasSpecial = true;
}
}
return hasUpper && hasLower && hasDigit && hasSpecial;
}
}
C++ 解法:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
bool isPasswordSafe(const string& password) {
if (password.length() < 8) return false;
bool hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;
for (char c : password) {
if (isupper(c)) hasUpper = true;
else if (islower(c)) hasLower = true;
else if (isdigit(c)) hasDigit = true;
else hasSpecial = true;
}
return hasUpper && hasLower && hasDigit && hasSpecial;
}
string processInput(const string& input) {
string password;
for (char c : input) {
if (c == '<') {
if (!password.empty()) {
password.pop_back();
}
} else {
password.push_back(c);
}
}
return password;
}
int main() {
string input;
cin >> input;
string password = processInput(input);
bool isSafe = isPasswordSafe(password);
cout << password << "," << (isSafe ? "true" : "false") << endl;
return 0;
}
+++================================================+++
以上内容仅为个人学习记录使用。
如有转载,请附有原文出处链接。
牛客网原题链接:https://www.nowcoder.com/issue/tutorial?zhuanlanId=jvZvZj&uuid=70bd755f3bc542babe905f40fea8edb2
浙公网安备 33010602011771号