题目描述:
对于一个字符串, 将其后缀子串进行排序, 例如 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;
- }
来源: http://www.bubuko.com/infodetail-2790102.html