题目是这样的:
某网站规定注册账号时密码必须达到一定强度才可以。他们规定密码长度至少6位,数字、大写字母、小写字母、符号(~!@#$%^&*()[]}{|<>?/.,:"';)这四类中至少包含三类才合格。现在请你写一段程序来判断一个密码是否合格。
输入格式:
第一行为一个整数n(0<n<10),代表测试用例组数,
后边是n行测试用例,每行为一个长度不超过30的字符串。
输出格式:
共n行,与输入的n行测试用例相对应,如果密码合格则输出yes,否则输出no。
输入样例:
2
123456
Hello2020.
输出样例:
no
yes
我敲的代码不符合题目要求,我认为是比较部分出现问题,但我不知道该怎么改
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
int n,i,j,a=0,b=0,e=0,d=0,l;
char c[30];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&c);
}
for(i=0;i<n;i++)
{
a=0;b=0;e=0;d=0;
for(j=0;j<30;j++)
{
if(c[j]>=48&&c[j]<=57)
{
a=1;
}
if(c[j]>=65&&c[j]<=90)
{
b=1;
}
if(c[j]>=97)
{
d=1;
}
if(c[j]>=33&&c[j]<=47)
{
e=1;
}
}
if((a+b+e+d)>=3)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}
我期望输出:
no
yes
题主的代码修改如下,见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
int n, i, j, a = 0, b = 0, e = 0, d = 0, l;
char c[30];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", c); //scanf("%s", &c); 修改
getchar();
//}修改 移动到最后 修改
a = 0; b = 0; e = 0; d = 0; //这句移动到这 修改
for (j = 0; j < strlen(c); j++) //for (i = 0; i < n; i++) 修改
{
//a = 0; b = 0; e = 0; d = 0; 修改
//for (j = 0; j < 30; j++) 修改
//{ 修改
if (c[j] >= 48 && c[j] <= 57)
{
a = 1;
}
if (c[j] >= 65 && c[j] <= 90)
{
b = 1;
}
if (c[j] >= 97)
{
d = 1;
}
if (c[j] >= 33 && c[j] <= 47)
{
e = 1;
}
}
if ((a + b + e + d) >= 3)
{
printf("yes\n");
}
else
{
printf("no\n");
}
//} 修改
} // 第一个for() 需包含到这 修改
return 0;
}
for(i=0;i<n;i++)
{
scanf("%s",&c);
}
你这一步,不是重复赋值了吗,相当于只保存了最后一个字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int judge(char*c)
{
int j, a = 0, b = 0, e = 0, d = 0;
for (j = 0; j < 30; j++)
{
if (c[j] >= 48 && c[j] <= 57)
{
a = 1;
}
if (c[j] >= 65 && c[j] <= 90)
{
b = 1;
}
if (c[j] >= 97)
{
d = 1;
}
if (c[j] >= 33 && c[j] <= 47)
{
e = 1;
}
}
if ((a + b + e + d) >= 3)
return 1;
else
return 0;
}
int main()
{
int n, i;
char c[30];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", c);
if (judge(c))
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}