时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1224
解决:481
- 题目描述:
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
- 输入:
每个案例为一行字符串。
- 输出:
将子串排序输出
- 样例输入:
grain
- 样例输出:
aingraininnrain
- 来源:
- 2010年上海交通大学计算机研究生机试真题
/********************************** 日期: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;}