先附上oj链接--密码检查_牛客题霸_牛客网
这道题首先我们先写出框架
int main() {
int a;
char arr[1000];
while (scanf("%d", &a) != EOF)
{
while(a--)
{
scanf("%s",arr);
if(check(arr))
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
这样我们就只需要写一个返回值为bool的函数check()就可以完成了。
接下来就是check的实现,因为我们要求只能出现数字和大小写字母,所以肯定是要遍历这个字符串的,所以我们就可以先判断第二个条件,首元素不能是数字,同时判断字符串长度至少为8。因为我们后面要做判断至少出现其中两种,所以我们可以写三个变量来记录每种类型出现的次数。
bool check(char* arr)
{
int a,b,c;
if((isdigit(*arr))||(strlen(arr)<8))
return false;
}
接着就是要遍历这个字符串。
bool check(char* arr)
{
int a,b,c;
if((isdigit(*arr))||(strlen(arr)<8))
return false;
for(int i=0;i<strlen(arr)-1;i++)
{
if(arr[i]>='0'&&arr[i]<='9')
a++;
else if(arr[i]>='a'&&arr[i]<='z')
b++;
else if(arr[i]>='A'&&arr[i]<='Z')
c++;
else
return false;
}
}
最后判断a,b,c是否符合要求就完成了
bool check(char* arr)
{
int a,b,c;
if((isdigit(*arr))||(strlen(arr)<8))
return false;
for(int i=0;i<strlen(arr)-1;i++)
{
if(arr[i]>='0'&&arr[i]<='9')
a++;
else if(arr[i]>='a'&&arr[i]<='z')
b++;
else if(arr[i]>='A'&&arr[i]<='Z')
c++;
else
return false;
}
if((a>0&&b>0)||(b>0&&c>0)||(a>0&&c>0))
return true;
else
return false;
}
接着完成框架和函数的链接就完成了。