/*********************************
* 日期:2013-2-13
* 作者:SJF0115
* 题号: 九度OJ 题目1099:后缀子串排序
* 来源:http://ac.jobdu.com/problem.php?pid=1099
* 结果:AC
* 来源:2010年上海交通大学计算机研究生机试真题
* 总结:
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//排序函数(二维字符串数组)
int cmp(const void *a,const void *b){
return (strcmp((char*)a,(char*)b));
}
char str[1000][1000];
char word[1000];
int main()
{
int i,len;
//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
while(scanf("%s",word) != EOF)
{
len = strlen(word);
for(i = 0;i < len;i++){
//将其后缀子串复制到str数组中
strcpy(str[i],word+i);
}
//排序
qsort(str,len,sizeof(str[0]),cmp);
//输出
for(i = 0;i < len;i++){
puts(str[i]);
}
}
return 0;
}
转载
#include <set>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
while(cin >> str)
{
set<string> s;
s.insert(str);
while(str.size()>1)
{
str = str.substr(1);
s.insert(str);
}
set<string>::iterator it;
for(it=s.begin(); it!=s.end(); it++)
cout << *it << endl;
}
return 0;
}
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
string ss;
while(getline(cin,ss))
{
int i;
vector<string> vv(ss.size());
for(i = 0;i < ss.size();i++)
vv[i] = ss.substr(i);
sort(vv.begin(),vv.end());
for(i = 0;i < vv.size();i++)
cout << vv[i] << endl;
}
return 0;
}