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