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