后缀子串排序

C语言 码拜 9年前 (2016-04-15) 1311次浏览
题目描述:
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n
然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
输入:
每个案例为一行字符串。
输出:
将子串排序输出
样例输入:
grain
样例输出:
ain
grain
in
n
rain
下边是本人写的程序,感觉没问题,本人devc++也能通过,为啥九度过不了呢
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct alphabet{
char ch;
int i;
};
int main()
{
void sort(struct alphabet*p,int m);
char str[500];
int m,j,n;
struct alphabet*p;
while((gets(str))!=EOF){
m=strlen(str);
p=(struct alphabet*)calloc(m,sizeof(struct alphabet));
for(j=0;str[j]!=”\0″;j++){
if(str[j]<=”Z”&&str[j]>=”A”)
p[j].ch=str[j]-“A”+”a”;
else
p[j].ch=str[j];
p[j].i=j;
}
sort(p,m);
for(j=0;j<m;j++){
for(n=p[j].i;n<m-1;n++)
printf(“%c”,str[n]);
printf(“%c\n”,str[n]);
}
}
return 0;
}
void sort(struct alphabet*p,int m)
{
int j;
char temp;
int sign;
for(j=1;j<m;j++){
temp=p[j].ch;
sign=p[j].i;
while(j>0&&temp<p[j-1].ch){
p[j].ch=p[j-1].ch;
p[j].i=p[j-1].i;
j–;}
p[j].ch=temp;
p[j].i=sign;
}
}
解决方案

5

字斟句酌,
边界条件。
后缀子串排序

20

while((gets(str))!=EOF){ 这句
gets返回值是char*,而 EOF是整数类型,不能这样比较
http://en.cppreference.com/w/c/io/gets

10

scanf返回值是接收到的变量值的个数
而EOF一般是-1

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明后缀子串排序
喜欢 (0)
[1034331897@qq.com]
分享 (0)