版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohaibo_/article/details/83052586
深夜水一道字符串,最近整理了自己的模版感觉真好
题目描述
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n
然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
输入
多组输入,每组输入为一行字符串。
输出
将子串排序输出,每行一个字符串
样例输入
grain
banana
样例输出
ain
grain
in
n
rain
a
ana
anana
banana
na
nana
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
#include <set>
using namespace std;
// #define LOCAL
#define _for(i,a,b) for(int i=(a); i<(b); ++i)
#define _rep(i,a,b) for(int i=(a); i<=(b); ++i)
#define INIF 0x3f3f3f3f
template<typename T>
ostream& operator<<(ostream& os, const vector<T>& v){
for(int i=0; i<v.size();++i) os<<v[i]<<endl; return os;
}
template<typename T>
ostream& operator<<(ostream& os, const set<T>& v){
for(typename set<T>::iterator it=v.begin(); it!=v.end(); ++it) os<<*it<<" "; return os;
}
struct Point{
int x, y;
Point(int x=0, int y=0):x(x),y(y){}
Point& operator=(Point& p){x=p.x; y=p.y; return *this;}
};
typedef Point Vector;
Vector operator+ (const Vector& A, const Vector& B){return Vector(A.x+B.x,A.y+B.y);}
Vector operator- (const Vector& A, const Vector& B){return Vector(A.x-B.x,A.y-B.y);}
Vector operator* (const Vector& A, int p){return Vector(A.x*p, A.y*p);}
bool operator== (const Point& a, const Point& b){return a.x==b.x && a.y==b.y;}
bool operator< (const Point& a, const Point&b){return a.x<b.x || (a.x==b.x && a.y<b.y);}
istream& operator>>(istream& is, Point &p){return is>>p.x>>p.y;}
int Next[4][2] = {-1,0,1,0,0,1,0,-1};
int readint() {int x;scanf("%d",&x); return x;}
int main(){
#ifdef LOCAL
freopen("/Users/zhaohaibo/Desktop/in.txt","r",stdin);
#endif
ios::sync_with_stdio(false);
string ss;
while(getline(cin,ss)){
vector<string>vec;
_rep(i,0,ss.length()-1)
vec.push_back(ss.substr(i));
sort(vec.begin(),vec.end());
cout<<vec;
}
return 0;
}