1099.后缀子串排序

题目描述:

对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain 
rain 
ain 
in 
n

然后对各子串按字典顺序排序,即: 
ain,grain,in,n,rain

输入:

每个案例为一行字符串。

输出:

将子串排序输出

样例输入:
grain
样例输出:
ain
grain
in
n
rain

 Solution1:(qsort)

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
 
/*
 
sort只能对string排序而不能对字符数组排序
 
要用qsort
 
 
 
*/
 
 
 
int cmp(const void  *a,const void  *b) {
 
    //return strcmp((const char *)a,(const char *)b);
    return strcmp((char *)a ,(char *)b);
}
 
 
int main() {
 
    char a[1000][1000];
 
    while(scanf("%s",a[0])!=EOF) {
     
        int len = strlen(a[0]);
 
        for(int i = 0;i < len-1;i++) {
         
            int k = 0;
            for(int j = i+1;j < len;j++) {
             
                a[i+1][k++] = a[0][j];
            }
            a[i+1][k] = '\0'; //必须添加
        }
 
         
 
        qsort(a,len,sizeof(a[0]),cmp);
 
        for(int i = 0;i < len;i++)
            printf("%s\n",a[i]);
 
 
    }
 
 
 
}

 

Solution2:(set)

#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

vector<string> v;

int main(){
    string str;
    while(cin>>str){
        v.clear();
        for(int i=0;i<str.size();i++){
            string temp=str.substr(i,str.size()-i);
            v.push_back(temp);
        }
        sort(v.begin(),v.end());
        for(int i=0;i<str.length();i++){
            cout<<v[i]<<endl;
        }
    }
    return 0;
}

 

posted @ 2018-10-02 10:34  bernieloveslife  阅读(898)  评论(0编辑  收藏  举报