解题思路:
1.定义三个数组,char数组a保存当前行的字符串
int数组b判断字符是否存在 有则为1 无责为0
int数组c保存每一行的字符种类
注意事项:
1.输入数字后需要getchar()吸收空格
新知识:
gets()函数:
从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets()函数并不 读取换行符'\n',它会把换行符替换成空字符'\0',作为c语言字符串结束的标志。
gets()函数经常和puts()函数配对使用,puts()函数用于显示字符串,并自动在字符串后面添加一个换行标志'\n'
memcpy函数:
void *memcpy(void*dest, const void *src, size_t n);
由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。
用memcpy完成二维数组赋值和数组赋非0初值很方便的哦
参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n,j,i=0; //n为行数,i,j为循环变量
char a[100]; //a为字符型数组用来接收字符串
int c[1000]={0},b[4]={0}; // c用来统计每行字符种类个数,b用来记录字符种类
scanf("%d",&n);
getchar(); //getchar()用来接收输入数字后的换行
while(i++<n){
gets(a); //读取一行
for(j=0;a[j]!='\0';j++){ //判断当前行字符种类
if(b[0]==0&&a[j]>='0'&&a[j]<='9')
b[0]++;
if(b[1]==0&&a[j]>='a'&&a[j]<='z')
b[1]++;
if(b[2]==0&&a[j]>='A'&&a[j]<='Z')
b[2]++;
if(b[3]==0&&(a[j]=='~'||a[j]=='!'||a[j]=='@'||a[j]=='#'||a[j]=='$'||a[j]=='%'||a[j]=='^'))
b[3]++;
} //先判断b[]否为0,保证每种字符只执行一次b[]++
if(j<8||j>16) //判断长度
;
else
c[i-1]=b[1]+b[2]+b[3]+b[0]; //c[]保存每一行字符种类个数
for(j=0;j<4;j++) //b[]归零
b[j]=0;
}
for(j=0;j<n;j++) //输出
printf("%s\n",c[j]>=3?"YES":"NO");
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复