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;
}