Задача
Назовем пароль криптостойким*, если выполнены $5$ критериев
- Пароль содержит строчные латинские буквы
- Пароль содержит заглавные латинские буквы
- Пароль содержит цифры
- Символы: ! » # $ % & ‘ ( ) * +
- Длина пароля не менее $8$ символов
Требуется по данному паролю определить, сколько критериев криптостойкости выполнено.
Входные данные
Вводится одна строка, состоящая только из латинских букв и цифр. Количество символов в строке не превышает $100$.
Выходные данные
Выведите количество критериев криптостойкости, которым удовлетворяет пароль.
Тесты
Входные данные | Выходные данные | |
1 | 1aA | 3 |
2 | AaBbCc12 | 4 |
3 | AAAaaaAAA | 3 |
4 | #Abc23$$$ | 5 |
Код программы (string)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> using namespace std; bool isspecial (char c) { return (c == '!' || c == '"' || c == '#' || c == '$' || c == '%' || c == '&' || c == '+' || c == '(' || c == ')' || c == '*' || c == '\''); } int main() { string password; cin >> password; bool test_lc, test_uc, test_dig, test_sp, test_len = password.length() >= 8; int length = password.length(); test_lc = test_uc = test_dig = test_sp = false; for (int i = 0; i < length; i++) { if (!test_lc) test_lc = islower(password[i]); if (!test_uc) test_uc = isupper(password[i]); if (!test_dig) test_dig = isdigit(password[i]); if (!test_sp) test_sp = isspecial(password[i]); } cout << test_len + test_lc + test_uc + test_dig + test_sp; return 0; } |
Код программы (c-string)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> #include <cstring> using namespace std; bool isspecial (char c) { return (c == '!' || c == '"' || c == '#' || c == '$' || c == '%' || c == '&' || c == '+' || c == '(' || c == ')' || c == '*' || c == '\''); } int main() { char password[101]; cin >> password; bool test_lc, test_uc, test_dig, test_sp, test_len = strlen(password) >= 8; int length = strlen(password); test_lc = test_uc = test_dig = test_sp = false; for (int i = 0; i < length; i++) { if (!test_lc) test_lc = islower(password[i]); if (!test_uc) test_uc = isupper(password[i]); if (!test_dig) test_dig = isdigit(password[i]); if (!test_sp) test_sp = isspecial(password[i]); } cout << test_len + test_lc + test_uc + test_dig + test_sp; return 0; } |
Решение
Для подсчёта удовлетворённых критериев криптостойкости будем использовать 5 булевских флагов, соответствующих каждому из критериев. Длину пароля определим сразу, а наличие символов определенного типа будем проверять в цикле. Для проверки наличия цифр и латинских букв нижнего и верхнего регистров используем встроенные функции isdigit() , islower() и isupper() , а для специальных символов напишем функцию isspecial() .
Ссылки
Для string:
Для c-string:
* В условии задачи — «крипто стойким».
Для отправки комментария необходимо войти на сайт.