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;

}


 


 

你可能感兴趣的:(字符串处理)