码迷,mamicode.com
首页 > 编程语言 > 详细

C语言-动态分配内存对任意个字符串进行排序

时间:2015-06-01 11:32:17      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:动态分配内存   排序   

//动态分配内存对输入的任意字符串排序

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
//比较大小
//int str_compare(const char* src,const char* dst)
//{
//	int ret = 0;
//	if (src == dst)
//	{
//		return 0;
//	}
//	if (dst == NULL)
//	{
//		return -1;
//	}
//	while (!(ret = *(unsigned char*)src - *(unsigned char*)dst)&& *dst)
//	{
//		++src,++dst;
//	}
//	if (ret < 0)
//	{
//		ret = -1;
//	}
//	else if (ret > 0)
//	{
//		ret = 1;
//	}
//	return ret;
//}

//排序函数
void sort_string( char *strs[],int len)
{
	int i=0,j;
	for(i=0;i<len;i++)
	{
		for ( j = 1; j < len - i; j++)
		{
			if(strcmp(strs[j-1],strs[j]) >0)
			{
				char *tmp = 0;
				tmp = strs[j-1];
				strs[j-1] = strs[j];
				strs[j] = tmp;
			}
		}

	}
	printf("\n 输出排序后的字符串:\n");
	//输出排序后的字符串
	for( i=0;i<len;i++)
	{
		printf("%s\n",strs[i]);
	}
}
int main()
{
	char *str=NULL,**strs=NULL,*p;
	unsigned int str_size=0,strs_size=0,i;
	
	printf("请输入字符串:(字符串间用空格隔开,回车结束输入)\n");
	do
	{
		//动态分配内存
		char *tmp=(char*)realloc(str,++str_size*sizeof(char));
		if(!tmp)
		{
			free(str);
			fputs("out of memory",stderr);
			return 1;
		}
		str=tmp;
		str[str_size-1]=getchar();
	}while(str[str_size-1]!='\n');

	str[str_size-1]=0;
	for(p=strtok(str," \t");p;p=strtok(NULL," \t")) {
		char **tmp=(char**)realloc(strs,++strs_size*sizeof(char*));
		if(!tmp)
		{
			free(str);
			free(strs);
			fputs("out of memory",stderr);
			return 1;
		}
		strs=tmp;
		strs[strs_size-1]=p;
	}

	printf("\n你输入的字符串是:\n");
	for(i=0;i<strs_size;++i)
		printf("%u:%s\n",i+1,strs[i]);

	//排序
	sort_string(strs,strs_size);

	//释放内存
	free(strs);
	free(str);

	system("pause");
	return 0;
}

C语言-动态分配内存对任意个字符串进行排序

标签:动态分配内存   排序   

原文地址:http://blog.csdn.net/u013147600/article/details/46301429

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!