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;
}



原文地址:https://www.cnblogs.com/javawebsoa/p/3028453.html