前言
2019.6.7更新:我觉得我之前写的是纯垃圾代码,不过这个不能怪我,我那个时候还没接受正规的训练,代码屎非常正常。得到的教训是,时常重构代码可以有效提高代码质量。
下面是我3分钟写的新版个位数统计
#include <stdio.h>
int main(){
char a[1000];
int num[10]={};
scanf("%s",a);
for(char *p=a;*p!='\0';p++){//Bitmap
num[*p-'0']++;
}
for(int i=0;i<10;i++){
if(num[i])
printf("%d:%d\n",i,num[i]);
}
}
正文
简单版算法:
1.得到字符串。
2.得到字符串长度。
3.判断数组那些是0,1,2…需要遍历10次,分别统计输入。同时输出。
好的地方:善用数组相关函数,简便,很容易改造成多数据输入版,只需要通过将scanf外加一个判断EOF的while和每次输出结束后将b还原为’0’.
首先上简单版
#include <stdio.h>
#include <string.h>
int main() {
int n,i,j;
char a[1000],b='0';
scanf("%s",a);
i=strlen(a);
while(b<='9'){//统计1~9每一个数字出现次数
n=0;
for(j=0;j<i;j++) {
if(a[j]==b) n++;
}
if(n!=0)
printf("%c:%d\n",b,n);//如出现次数不为0,输出
b+=1;
}
return 0;
}
我写的版本1 1.输入一个字符 2.判断一次0-9,记到i0-i9,判断是否能输出 3.继续,直到’\0’判断结束,输出一个值代表能输出 4.输出一次,重新初始化,再重复循环 好的地方:其实可以没必要用数组,一个值就够了。 缺点:多出了字符个数次+1次能否输出的判断。 变量个数过多。
#include<stdio.h>
int main(){
int i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,u;
i0=0; i1=0; i2=0; i3=0; i4=0; i5=0; i6=0; i7=0; i8=0; i9=0;/*我要做的: 首先用重复多组输入,输入到c 然后直接判断个数?输出一次?然后再输入一次再 */
char c[1001];
for(int i=0;scanf("%c",&c\[i\])!=EOF;i++){
for(u=0;u<1;u++){
switch(c\[i\]){
case'0':i0++;break; case'1':i1++;break; case'2':i2++;break;
case'3':i3++;break; case'4':i4++;break; case'5':i5++;break;
case'6':i6++;break; case'7':i7++;break; case'8':i8++;break;
case'9':i9++;break; case'\n':u=2;break;
}
if(u==2){
if(i0!=0)printf("0:%d\n",i0);
if(i1!=0)printf("1:%d\n",i1);
if(i2!=0)printf("2:%d\n",i2);
if(i3!=0)printf("3:%d\n",i3);
if(i4!=0)printf("4:%d\n",i4);
if(i5!=0)printf("5:%d\n",i5);
if(i6!=0)printf("6:%d\n",i6);
if(i7!=0)printf("7:%d\n",i7);
if(i8!=0)printf("8:%d\n",i8);
if(i9!=0)printf("9:%d\n",i9);
i=0; i0=0; i1=0; i2=0; i3=0; i4=0; i5=0; i6=0; i7=0; i8=0; i9=0; }
}
}
return0;
}
我参考简单版后写的版本二 1.直接输入数组 2.直接判断 3.其他地方跟版本1一样
int main(){
charc[1000];
intu,n,v; inti0,i1,i2,i3,i4,i5,i6,i7,i8,i9; i0=0; i1=0; i2=0; i3=0; i4=0; i5=0; i6=0; i7=0; i8=0; i9=0; n=0; v=0;
while(scanf("%s",c)!=EOF){
for(n=0;c\[n\]!='\\0';n++) for(u=0;u<=n;u++){ switch(c\[u\]){ case'0': i0++; break; case'1': i1++; break; case'2': i2++; break; case'3': i3++; break; case'4': i4++; break; case'5': i5++; break; case'6': i6++; break; case'7': i7++; break; case'8': i8++; break; case'9': i9++; break; case'\\0': v=2; break; }
if(v==2){ if(i0!=0)printf("0:%d\\n",i0); if(i1!=0)printf("1:%d\\n",i1); if(i2!=0)printf("2:%d\\n",i2); if(i3!=0)printf("3:%d\\n",i3); if(i4!=0)printf("4:%d\\n",i4); if(i5!=0)printf("5:%d\\n",i5); if(i6!=0)printf("6:%d\\n",i6); if(i7!=0)printf("7:%d\\n",i7); if(i8!=0)printf("8:%d\\n",i8); if(i9!=0)printf("9:%d\\n",i9); u=0; n=0; i0=0; i1=0; i2=0; i3=0; i4=0; i5=0; i6=0; i7=0; i8=0; i9=0; } } } }
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 [email protected]