C语言 题目 1724: 后缀子串排序

调试了好久,才发现是分配的内存大小问题,我还以为这一题不能使用stdlib库呢。ಠ_ಠ注意数组大小和malloc分配的内存一定要大!!!!否则会显示运行错误50!!!有什么问题可以在评论区指出一起讨论。

题目描述

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

输入格式

每个案例为一行字符串。

输出格式

将子串排序输出

样例输入

grain
banana

样例输出

ain
grain
in
n
rain
a
ana
anana
banana
na
nana
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare(char*,char*);
//void swap(char*,char*); 
int main(){
	char* temp;
	char a[1000][1000];//这里分配的数组元素一定要够大,不然会显示运行错误50,试过500不行,1000就行了 
	char s[1000];
	while(~scanf("%s",s)){
		getchar();
		int t=0;
		for(int i=0;i<strlen(s);i++){//获取子串 
			int l=0;
			for(int j=i;j<strlen(s);j++){
				a[t][l++]=s[j];
			}
			a[t][l]='\0';//别忘末尾添加'\0' 
			t++;
		}
		for(int i=0;i<t;i++){//类似选择排序 
			int max=i;
			for(int j=i+1;j<t;j++){
				if(compare(a[max],a[j])){//手动比较,也可以strcmp库函数比较 
					max=j;
				}
			}
//			swap(a[i],a[max]);
		temp=(char*)malloc(1000*sizeof(char));//这里分配的内存一定要够大,不然会显示运行错误50 
		strcpy(temp,a[i]);
		strcpy(a[i],a[max]);
		strcpy(a[max],temp);	
		free(temp);
		}
		for(int i=0;i<t;i++)
		printf("%s\n",a[i]);
	}
}
//void swap(char* s1,char* s2){
//	int l1=strlen(s1);
//	int l2=strlen(s2);
//	char* temp=(char*)malloc((l1+1)*sizeof(char));
//	for(int i=0;i<l1;i++){
//		temp[i]=s1[i];
//	}
//	temp[l1]='\0';
//	for(int i=0;i<l2;i++){
//		s1[i]=s2[i];
//	}
//	s1[l2]='\0';
//	for(int i=0;i<l1;i++){
//		s2[i]=temp[i];
//	}
//	s2[l1]='\0';
//	free(temp);
//}
int compare(char* s1,char* s2){//手动比较,也可以strcmp函数比较 
	int l1=strlen(s1);
	int l2=strlen(s2);
	int i,j;
	for(i=0,j=0;i<l1&&j<l2;i++,j++){
		if(s1[i]>s2[j]){
			return 1;
		}
		else if(s1[i]==s2[j]){
		continue;
		}
		else{
		return 0;
		}
	}
	if(i==l1) 
	return 0;
	else
	return 1;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值