解题思路:
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语言代码)浏览:1048 |
【绝对值排序】 (C语言代码)浏览:892 |
循环入门练习6 (C语言代码)浏览:1058 |
C二级辅导-同因查找 (C语言代码)浏览:618 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:812 |
字符逆序 (C语言代码)浏览:541 |
C二级辅导-分段函数 (C语言代码)浏览:790 |
快速排序算法1浏览:996 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:522 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1213 |