后缀子串排序

129 阅读1分钟

题目描述

对于一个字符串,将其后缀子串进行排序,例如grain其子串有:grain、rain、ain、in、n,然后对各子串按字典顺序排序,即:ain,grain,in,n,rain

输入描述

多组数据输入,每个案例为一行字符串。

输出描述:

将子串排序输出

示例

输入
grain

输出
ain
grain
in
n
rain

思路

  1. 输入一个字符串,利用substr方法提取它的所有子串,并存放在字符串数组中。

  2. 对字符串数组进行sort排序,按从小到大的顺序排序,最后输出即可。

具体实现

#include<bits/stdc++.h>
using namespace std;

bool cmp(string a, string b){
	return a<b;
}

int main(){
	string s,a[100];
	int i;
	while(cin>>s){
		int ls = s.size();
		int t=ls;
		
		for(i=0; i<ls; i++){//获取子串 ,并存入a数组中 
			if(ls!=0){
				a[i]=s.substr(i,t); //提取子串,从索引i开始,提取连续t个字符 
				//cout<<a[i]<<endl;
				t--;
			}else 
				break;
		} 
		
		sort(a,a+ls,cmp); //排序 
		for(int i=0; i<ls; i++)
		cout<<a[i]<<endl;
	}
	return 0;
}

小结

  • substr(i,n):提取字符串,从下标i开始,连续提取n个字符。

  • sort排序真香。