时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1224
解决:481
- 题目描述:
-
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
- 输入:
-
每个案例为一行字符串。
- 输出:
-
将子串排序输出
- 样例输入:
-
grain
- 样例输出:
-
ain grain in n rain
- 来源:
- 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; }