HDOJ 1106 排序 (字符串处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106
简单的字符串处理,注意以下数据即可
555500000
0000055555
0055550000
下面提供两种做法:
1.利用C语言库函数strtok(将函数按字符串分割)和atoi(将字符串转成int)
/*HDOJ1106 作者:陈佳润 2013-04-18 */ #include<iostream> #include<string.h> #include<stdlib.h> using namespace std; int cmp ( const void *a , const void *b ) { return *(long int *)a - *(long int *)b;//从小到大 //return *(int *)b - *(int *)a; //从大到小 } int main(){ char str[1005]; long int number[1005]; int num,i; //freopen("1.txt","r",stdin); while(scanf("%s",str)!=EOF){ char *p; num=0; p=strtok(str,"5"); while(p!='\0'){ number[num++]=atoi(p); p=strtok(NULL,"5"); } qsort(number,num,sizeof(long int),cmp); for(i=0;i<num;i++){ cout<<number[i]; if(i!=num-1) cout<<" "; } cout<<endl; } return 0; }
2.标准做法
/*HDOJ1106 作者:陈佳润 2013-04-18 */ #include<iostream> #include<string.h> using namespace std; int main(){ int num,i,j; char str[1005]; long int number[1005],temp; // freopen("1.txt","r",stdin); while(scanf("%s",str)!=EOF){ memset(number,0,sizeof(number)); num=0;//第num个数 i=0;//字符串下标 while(str[i]=='5') i++;//消除刚开始出现的5 for(;str[i]!=0;i++){ if(str[i]=='5'&&(str[i+1]=='5'||str[i+1]==0)){//消除中间和后面的5 continue; } if(str[i]=='5'){//遇上5,则开始下一个数字的计算 num++; continue; } number[num]*=10; number[num]+=(str[i]-48); } for(i=0;i<=num;i++){//排序 for(j=i+1;j<=num;j++){ if(number[i]>number[j]){ temp=number[i]; number[i]=number[j]; number[j]=temp; } } } for(i=0;i<=num;i++){//输出 cout<<number[i]; if(i!=num) cout<<" "; } cout<<endl; } return 0; }