HDU-1106-排序

#include<iostream>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
/*
    我觉得这题如果能够更好的使用string函数库里的函数,想必会很简单;
    所以说,掌握必要的函数是很有必要的;
    s.substr(a,b)   表示在字符串s中从第a个数开始,截取b个字符;
    s.find('5')     表示在字符串s中找到字符5,并返回5第一个5的下标,s.npos表示没有找到;
*/
string s;
bool cmp(int x,int y)
{
    return x<y;
}
int main()
{
    while(cin>>s){
        int cnt=0;
        int a[1005]={0};
        while(s[0]=='5') s=s.substr(1,s.size()-1);  //  首先去除开头就是5的数字;
        while(s.size()){
            string temp;    //  定义字符串,用于存储每次截取下来的字符串;
            if(s.find('5')!=s.npos) temp=s.substr(0,s.find('5')),s=s.substr(s.find('5'),s.size()-s.find('5'));  //  还有5的时候,截取第一个5前面的部分;
            else temp=s,s="";   //  找不到5的时候,就只剩下这一串字符串;
            while(s[0]=='5') s=s.substr(1,s.size()-1);  //  道理同21行,去除剩余s字符串开头的5;
            for(int i=0;i<temp.size();i++) a[cnt]=a[cnt]*10+temp[i]-'0';    //  将截取下来的字符串转化成数字,存在数组中;
            cnt++;
        }
        sort(a,a+cnt,cmp);  //  从小到大排序
        for(int i=0;i<cnt-1;i++) printf("%d ",a[i]);
        printf("%d\n",a[cnt-1]);
    }
    return 0;
}



 

你可能感兴趣的:(字符串函数,快排,hdu1106)