二维数组合并和排序

代码:

<span style="font-family:FangSong_GB2312;">/**
作者:一叶扁舟
时间:23:56 2016/8/26
作用:将一个一维数组和一个二维数组的数据合并,并排序
***/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/*
参数:
char **array1:指针数组
int num1:指针数组的行数
char (*array2)[30]:二维数组
int num2:二维数组的行数
int* array3Num:用来返回合并后的二维数组元素的长度
*/
char ** sortArray1Array2(char **array1,int num1,char (*array2)[30],int num2,int* array3Num){
	//合并后二维数组的长度
	int num3 = num1 + num2;
	*array3Num = num3;

	char **pTemp = (char**)malloc(sizeof(char*) *( num1 + num2));
	//创建二维指针的一维指针所指向的空间,同时将数组1拷贝到数组三中
	for (int i = 0; i < num1; i++){
		pTemp[i] = (char*)malloc(sizeof(char)* 64);
		memcpy(pTemp[i], array1[i], sizeof(char)*30);
	}
	int k = 0;
	//拷贝数组2的数据
	for (int i = num1; i < num3; i++,k++){
		pTemp[i] = (char*)malloc(sizeof(char)* 64);
		memcpy(pTemp[i], array2[k], sizeof(char)* 30);
	}

	//申请一个零时空间用来交换数据
	char *tempCopy = (char*)malloc(sizeof(char)* 100);
	//排序
	for (int i = 0; i < num3; i++){
		for (int j = 0; j < num3; j++){
			if (strcmp(pTemp[i], pTemp[j])>0){
				//交换内存数据
				strcpy(tempCopy, pTemp[j]);
				strcpy(pTemp[j], pTemp[i]);
				strcpy(pTemp[i], tempCopy);			
			}
		
		}
	}
	return pTemp;

}


//内存的释放
void freeArray(char **array3, int num3){
	
	if (array3 == NULL){
		return;
	}

	//释放掉二维指针指向的空间
	for (int i = 0; i < num3; i++){
		if (array3[i] != NULL)
		free(array3[i]);
	}

	if (array3 != NULL){
		free(array3);
	
	}



}

void main(){
	int i = 0;
	char **pArray3 = NULL;
	int array3Num = 0;
	//指针数组
	char *array1[] = { "bbbbb", "aaaaa", "ccccc", "22222", "11111", "44444" };

	//二维数组
	char array2[10][30] = { "zzzz", "yyyy", "333333" };

	pArray3 = sortArray1Array2(array1, 6, array2, 3, &array3Num);
	//异常处理
	if (pArray3 == NULL){
		printf("func sortArray1Array() err\n");
	}
	//输出排序后的数组数据
	for (i = 0; i<array3Num; i++){
		printf("%s \n", pArray3[i]);
	}
	//释放内存
	freeArray(pArray3, array3Num);
	system("pause");

}</span>

代码效果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值