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

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

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

时间: 2024-08-25 20:18:56

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

C语言-对输入的n个字符串进行排序

#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 256 //宏定义 int main() { char strArray[N][256]; char *str[N]; char *temp; int i,n; printf("请输入字符串:\n"); for(i=0;i<N;i++) { gets(strArray[i]); if (strcmp(strArra

C语言 realloc为什么要有返回值,realloc返回值详解/(解决任意长度字符串输入问题)。

在C语言操作中会用到大量的内存操作,其中很常用的一个是realloc(). 由字面意思可以知道,该函数的作用是用于重新分配内存. 使用方式如下: NewPtr=(数据类型*)realloc(OldPtr,MemSize) 其中OldPtr指向 待重新分配内存的指针. NewPtr指向 新分配空间的指针. MemSize为 分配后的空间大小. 该函数的使用涉及以下几个问题: 1.不同情况下的返回值 2.OldPtr指向的内存会不会自动释放 3.OldPtr和NewPtr分别是什么内容,他们有什么关

C语言动态分配二维数组内存

C语言内存管理主要包括malloc().remalloc().free()三个函数. malloc原型 extern void *malloc(unsigned int num_bytes); m行n列的 二维数组的分配,主要有三种方法: 一.分配一个长度为m的二级指针,指针的指向的内容分别指向一个长度为n的一位数组 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>

比较C/C++和Delphi中的字符串和字符数组(数组和动态分配内存的情况)

本文所讲解的只是从其中一个方面来看待进行的总结,所以有必要结合<Delphi字符串与字符数组之间的转换(初始化的重要性)>等文章进行更全面的了解,会从更多方面来理解字符串.内存.类型转换 C/C++中的字符串.字符数组.字符指针分配的内存空间 我们知道在C/C++中,我们可以这样理解字符串和字符数组 1)字符串,就是一个以 '\0' 结尾的字符数组 2)字符数组,包括字符串,但是不一定要以 '\0' 结尾,如果不是以'\0' 结尾,那么就不能当做字符串使用 在C/C++中,使用字符串可以通过数

C语言-输入任意个字符串

来源网站: ==== http://bbs.csdn.net/topics/391045349?page=1#post-399279449 方法一: //输入任意个字符串 #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE 5 int main() { int i = 0, n = LINE; int l, len; char **str; char buf[256]; //每个

C语言中二维数组如何申请动态分配内存

C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc.h> int main() { int **a; int i, j; a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行 for (i = 0; i < 3; ++i){//为每列分配4个大小空间 a[i] = (int*)malloc(sizeof(int

C语言中内存分配

C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别. 第2节主要介绍C语言中内存分配及释放函数.函数的功能,以及如何调用这些函数申请/释放内存空间及其注意事项. 3.1 内存管理基本概念 3.1.1 C程序内存分配 1

C语言中内存分配问题:

推荐: C语言中内存分配 Linux size命令和C程序的存储空间布局 本大神感觉,上面的链接的内容,已经很好的说明了: 总结一下: 对于一个可执行文件,在linux下可以使用 size命令列出目标文件各部分占的字节数:分为:text段.data段与bss段:(参考:Linux size命令和C程序的存储空间布局) 对于一个可执行文件,它的存储空间包括: 1. 代码区(text segment).存放CPU执行的机器指令(machine instructions) 2. 全局初始化数据区/静态

C语言中内存分配 (转)

在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别. 第2节主要介绍C语言中内存分配及释放函数.函数的功能,以及如何调用这些函数申请/释放内存空间及其注意事项. 3.1 内存管理基本概念 3.1.1 C程序内存分配 1.C程序结构 下面