数组和字符串(分数统计_stat,单词的长度,乘积的末3位,计算器,旋转_rotate,进制转换1_base1,进制转换2_base2,手机键盘)
来源:互联网 发布:手机怎么删除淘宝地址 编辑:程序博客网 时间:2024/06/07 22:04
关于C语言字符串
- 别人家的整理
- scanf和gets的区别
字符串输入的方法
- scanf(“%s”,in_buff);
- gets(in_buff);
- fgets(in_buff,BUFFER_SIZE + 1,stdin);
1.当使用scanf函数时,如果在数组范围内有空格,那么第一个空格之后的字符将被忽略,这通常不是我们想要的。另外,scanf函数也不提供对写入数组的数据是否越界的检查。
2.当使用gets函数时,由于gets不提供对写入数组的数据进行是否越界的检查,所以也不安全。
3.而使用fgets函数时,只要第二个参数正好等于第一个参数传给它的数组的字节个数,那么fgets函数不会写出数组边界。所以,fgets函数是最好的选择.
1 分数统计_stat
好像这个办法很笨,不知道有没有好主意==
疑问:当分数为非负实数时(保留两位小数)。嗯,乘以100..==
int main() { int a[101]={0}; int i=0,u,max; while(scanf("%.2f",&u)!=EOF){ a[u]++; } for(i=0;i<100;i++){ if(a[i]>max) max=a[i]; }//输出分数出现次数最多的,如果有多个并列,从小到大输出。 for(i=0;i<100;i++) { if(a[i]==max) printf("%d\n",i); } return 0;}
输入:
12 34 56 78 89 12 12 12 34 34 34
输出:
1234
2 单词的长度
输入一些单词,统计单词的平均长度
#include <stdio.h>#include<string.h>#include<ctype.h>int main() { char s[1000],buf[1000]; int sum=0,count=0,i; fgets(buf,sizeof(s),stdin); //从后往前,因为你不知道最后一个是什么时候截止 for(i=strlen(buf)-1;i>0;i--){ if(buf[i]==' ') count++; else sum++; } printf("%lf\n",(double)sum/count); return 0;}//i am best one
输入输出:
3 乘积的末3位——product(借鉴)
输入若干个整数,输出他们的成绩的末三位(取余),其中有干扰的字符串
break是结束整个循环体,continue是结束单次循环
一直没搞懂题目是要怎么输入的,认真看“输入若干个“,肯定不是要输入一个字符串,这样就可以使用while!=EOF来循环输出
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 100#define MOD 1000char a[MAXN];int main(){ int i, n; long d= 0, sum= 1; while(scanf("%s", a)!=EOF) { n = strlen(a); for(i = 0; i < n; i++) { if(a[i] >= 'A' && a[i] <= 'Z') break; //一定要判断是怎么退出的 continue; d=(d*10+a[i]-'0')%MOD; } if(a[i] >= 'A' && a[i] <= 'Z') continue; //如果是大写字母,就不用进行乘法 sum=sum*d%MOD; d= 0;//这种计数用的,每次都要清零 } printf("%3d\n",sum); system("PAUSE"); return 0; }
假设输入:
12H12HU12
输出:
728
4 计算器
编写程序,读入一行恰好包含一个加号、减号或乘号的表达式,输出它的值。这个运算符保证是二元运算符,且两个数均为不超过100的非负整数。运算数和运算符可以紧挨着,也可以用一个或多个空格、TAB隔开。行首末尾均可以有空格。提示:选择合适的输入方法可以将问题简化。
一直想着一步到位的,最后发现没有用。分成两部分反而更好处理,以运算符号为中心分成两个部分计算。
#include <stdio.h>#include<string.h>char buf[1010];int main() { int m=0,n=0,i,l; int middle; while(fgets(buf,sizeof(buf),stdin)){ l=strlen(buf); for(i=0;i<l-1;i++){ if(buf[i]=='+'||buf[i]=='-'||buf[i]=='*') middle=i; } for(i=0;i<middle;i++){ if(buf[i]==' ') continue; m=m*10+buf[i]-'0'; } for(i=middle+1;i<l-1;i++){ if(buf[i]==' ') continue; n=n*10+buf[i]-'0'; } // if(buf[i]==' ') continue; // d=d*10+buf[i]-'0'; // if(buf[i]=='+') {sign=1;m=d;d=0;} // else if(buf[i]=='-'){sign=-1;m=d;d=0;} // else if(buf[i]=='*'){sign=0;m=d;d=0;} switch(buf[middle]) { case '+': printf("%d\n", m+n);break; case '-': printf("%d\n", m-n);break; case '*': printf("%d\n", m*n);break; } m = 0; n = 0; } return 0;}
输入:
1+12- 50 *1982
输出:
2-30
5 旋转_rotate
#include <stdio.h>#include<stdlib.h>#include<string.h>char a[1010][1010],s[1001][1010];int main() { int i,j,n; scanf("%d",&n); getchar(); char temp;/* for(i = 0; i < n; i++) scanf("%s", a[i]);*/ for(i=0;i<n;i++){ for(j=0;j<n;j++) scanf("%c",&a[i][j]); getchar(); }/* for(i=0;i<n;i++){ for(j=0;j<n;j++) printf("%c ",a[i][j]); printf("\n"); }*/ for(i=0;i<n;i++){ for(j=0;j<n;j++){ s[i][j]=a[j][n-i-1]; printf("%c",s[i][j]); } printf("\n"); } return 0;}
输入:
3123456789
输出:
31 2 34 5 67 8 9
各种旋转
int main(){ int a[5][6]={1,3,4,2,5,2, 2,3,6,3,8,3, 2,9,7,9,4,8, 6,3,8,1,9,3, 9,3,5,2,8,5,}; int s90[6][5],ni90[6][5],x180[5][6]; int i,j; printf("顺时针旋转90度矩阵为:\n"); for(i=0;i<6;i++){ for(j=0;j<5;j++) { s90[i][j]=a[4-j][i]; printf("%2d%",s90[i][j]); } printf("\n"); } printf("逆时针旋转90度矩阵为:\n"); for(i=0;i<6;i++){ for(j=0;j<5;j++) { ni90[i][j]=a[j][5-i]; printf("%2d%",ni90[i][j]); } printf("\n"); } printf("旋转180度矩阵为:\n"); for(i=0;i<5;i++) { for(j=0;j<6;j++) { x180[i][j]=a[4-i][5-j]; printf("%2d%",x180[i][j]); } printf("\n"); }}
6 进制转换1_base1
#include <stdio.h>int a[100];int main() { int i=0,b,n; scanf("%d%d",&b,&n); while(n>0){ a[i]=n%b; n=n/b; printf("%d",a[i++]); } return 0;}
输入:
2 15
输出:
1111
7 进制转换2_base2
#include <stdio.h>int main() { int n,b,k=1; int s=0; scanf("%d%d",&b,&n); while(n>0){ s+=n%10*k; k=k*b; n=n/10; } printf("%d",s); return 0;}
输入:
2 1111
输出:
15
8 手机键盘——keyboard
需要注意限制范围,当输入‘z’时候特殊处理,当输入‘a’到‘y’时取余,没有限制的话会出现又输出个1。原因可能是最后一个输入换行为一个字符’\0’,取余之后为0。
#include <stdio.h>#include<string.h>int main() { char a[100]; int i=0,k; while(scanf("%c",&a[i])!=EOF){ if(a[i]=='z'){printf("%c",a[i]);printf("4");} else if(a[i]>='a'&&a[i]<'z'){ k=(a[i]-'a')%3; switch(k){ case 0: {printf("%c",a[i]);printf("1");break;} case 1: {printf("%c",a[i]);printf("2");break;} case 2: {printf("%c",a[i]);printf("3");break;} }/* if(k==0){printf("%c",a[i]);printf("1");continue;} if(k==1){printf("%c",a[i]);printf("2");continue;} if(k==2){printf("%c",a[i]);printf("3");continue;}*/ } i++; } return 0;}
输入:
pig
输出:
p1i3g1
九宫格输入法示意图:
阅读全文
0 0
- 数组和字符串(分数统计_stat,单词的长度,乘积的末3位,计算器,旋转_rotate,进制转换1_base1,进制转换2_base2,手机键盘)
- 乘积的末3位
- 乘积的末3位
- #乘积的末3位
- 算法竞赛入门经典 习题3-1 分数统计 习题 3-2 单词的长度
- C# string字符串转换为字节数组和转换为16进制的字符串形式
- 算法竞赛入门经典 3-3 乘积的末三位 习题 3-4 计算器 习题3-5 旋转
- 习题3-3 乘积的末3位
- 字符串和数组的转换
- byte数组转换成16进制字符串和字符数组的方法
- byte数组转换成16进制字符串和字符数组的方法
- 将16进制的字符串转换成byte数组
- 字节数组转换成16进制的字符串
- 字节数组与16进制字符串之间的转换
- 16进制与字符串、字节数组之间的转换
- 乘积的末三位
- 乘积的末三位
- java 16进制字符串和byte数组的相互转换
- 2017 中国电信(美洲)公司CTExcel电话卡使用攻略
- 写高质量OC代码52建议总结:52.NSTimer会保留其目标对象
- JS
- CountDownLatch使用示例
- html基础篇第一弹
- 数组和字符串(分数统计_stat,单词的长度,乘积的末3位,计算器,旋转_rotate,进制转换1_base1,进制转换2_base2,手机键盘)
- OpenStack安装部署
- bzoj2756[SCOI2012]奇怪的游戏 二分 分类讨论 最大流
- Android Studio调用 符合JNI标准和非JNI标准的so库总结
- CvScalar
- Linux kernel U盘识别流程
- Java Lock使用示例
- 设置apt-get源
- 深度学习,图像分类,从vgg到inception,到resnet