题目描述:
对于一个字符串,将其后缀子串进行排序,例如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;
}
}
对于一个字符串,将其后缀子串进行排序,例如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
10
scanf返回值是接收到的变量值的个数
而EOF一般是-1
而EOF一般是-1