您的位置:首页 > 其它

HDOJ 1106 排序 (字符串处理)

2013-04-18 00:11 501 查看
题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: