代码:
<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>
代码效果图: