ZCMU--4922: 后缀子串排序

Description

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

Input

每个案例为一行字符串。

Output

将子串排序输出

Sample Input

grain

banana

Sample Output

ain

grain

in

n

rain

a

ana

anana

banana

na

nana

解析:这题主要问题是怎么把后缀字符串提炼出来,为此我们利用结构体数组来存储后缀字符串,设字符串长度为len,设一个s用来定位,s=len时,设输入grain,s~len就是n,s=len-1时,s~len就是in,以此s从len推到0,再每个遍历存入结构体中,排序输出就好。

#include <bits/stdc++.h>
using namespace std;
struct su{
	char zi[1005];	//存储后缀字串 
	bool operator<(const su&x)const{	//sort排序方式 
		return strcmp(zi,x.zi)<0;
	}
}arr[1005];
char k[1005];	//原始字符串 
int main()
{
	int len,i,p,s,l;	//len是字符串长度 
	while(~scanf("%s",k)){
		i=0;
		memset(arr,'\0',sizeof(arr));	//得清空,不然会有残留 
		len=strlen(k);
		s=len-1;	//初始定位最后一个字母  
		while(s>=0){
			p=0;
			for(l=s;l<len;l++){
				arr[i].zi[p++]=k[l];	//存储后缀字符 
			}
			i++;
			s--;
		}
		sort(arr,arr+len);	 
		for(i=0;i<len;i++){
			printf("%s\n",arr[i].zi);
		}
	}	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值