赞
踩
今天下午公司出的一道技术考核题目,好久不写C++生疏了,当时也想复杂了,提供的编辑器不好用不能调试,后来干脆直接用g++调试。回家后重新写了一份。今后要多多锻炼自己的抽象提取总结能力。好久不写C++代码就会变得生疏,要多认真刷LeetCode。数据结构和操作系统是核心与基础,数学是支撑,计网数据库编程语言是强有力辅助,万变不离其中。核心技术的提升会使得工作得心应手,会提高效率,更快的定位问题,写出更健壮优美的代码。
某系统对强密码要求如下:
由至少 6 个,至多 9 个字符组成。至少包含一个小写字母,一个大写字母,
和一个数字。同一字符不能连续出现三次(比如“…aaa…”是不允许的,
但是"…aa…a…”是可以的)。
编写程序,检查输入字符串,如果输入字符串已经符合强密码条件,则返回
0;否则返回要将输入字符串修改为满足强密码条件的字符串所需要进行修
改的最小步数。插入、删除、替换任一字符都算作一次修改。比如:输入
“091XXX”,则返回 1,输入“335Pw12”,则返回 0。
#include <iostream> using namespace std; int lengthCheck(const string &str) { int sizeStr = str.size(); if (sizeStr < 6 || sizeStr > 9) { cout << "Password length does not meet specifications" << endl; return -1; } else { return sizeStr; } } void transInt(const string &str, int size, int *vec) { for (int i = 0; i < size; ++i) { if (str[i] >= '0' && str[i] <= '9' && vec[0] != 1) { vec[0] = 1; } else if (str[i] >= 'a' && str[i] <= 'z' && vec[1] != 1) { vec[1] = 1; } else if (str[i] >= 'A' && str[i] <= 'Z' && vec[2] != 1) { vec[2] = 1; } } } int countThree(const string &str, int size) { int sumThree = 0; for (int i = 0; i <= size - 3; ++i) { if (str[i] == str[i + 1] && str[i] == str[i + 2]) { sumThree++; i += 2; } } return sumThree; } int countChange() { string str; int sum = 0; cout << "please input your password:"; cin >> str; int sizeStr = lengthCheck(str); if (sizeStr == -1) { return -1; } int passInt[3] = {}; transInt(str, sizeStr, passInt); sum = passInt[0] + passInt[1] + passInt[2]; int sumThree = countThree(str, sizeStr); if (3 - sum > sumThree) { return 3 - sum; } else { return sumThree; } } int main() { for (int i = 0; i < 10; ++i) { int out = countChange(); while (out == -1) { out = countChange(); } cout << out << endl; } return 0; }
输出结果:
谢谢观看,祝顺利。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。