密码安全一直是一件棘手的事情。用户更喜欢容易记住的简单密码,但这样的密码通常不安全。一些网站使用随机生成的密码,但用户很难记住它们,有时会把它们写在电脑上的笔记上。一个潜在的解决方案是生成相对安全且仍易于记忆的密码。
小明正在开发这样一个密码生成器,你的工作是测试它,确保密码是可接受的。要被接受,密码必须满足以下三条规则:
1.它必须至少包含一个元音。
2.它不能包含三个连续的元音或三个连续的辅音。
3.除了 ee 或 oo 之外,它不能包含同一个字母的两个连续出现。 元音是 a、e、i、o 和 u,所有其他字母都是辅音。
供参考:
#include <stdio.h>
#include <string.h>
int main()
{
int i, j, k, flg, flag;
char alphabet1[5] = {'a','e','i','o','u'},
alphabet2[21]= {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'},
paw[21];
scanf("%s", paw);
for (i = 0,flg = 1;paw[i];i++) {
for (j = 0;j < 5;j++)
if (alphabet1[j] == paw[i]) {flg = 0; break;}
if (!flg) break;
}
if (flg) {//如果输入字符串中没有元音字母则输出no并返回
printf("no");
return 1;
}
for (i = 0;i < strlen(paw) - 2;i++)
{
flg = 0; flag = 0;
for (j = i;j < i + 3;j++)
{
for (k = 0;k < 5;k++)
if (paw[j] == alphabet1[k]) {flg = 1; break;}
for (k = 0;k < 21;k++)
if (paw[j] == alphabet2[k]) {flag = 1;break;}
}
if (flg && flag) //如果包含连续3个字母的子字符串中含有元音和辅音则跳过
continue;
printf("no");//否则输出no并返回
return 1;
}
for (i = 0;i < strlen(paw) - 1;i++)
{
if (paw[i] == paw[i+1] && paw[i] != 'e' && paw[i] != 'o')//判断连续两个字母是否符合条件
{
printf("no");
return 1;
}
}
printf("acceptable");
return 0;
}