题目描述
给定用户密码输入流 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

posted on 2024-06-28 16:30  Hy旧人伤  阅读(227)  评论(0)    收藏  举报