/*
功能:
1.把指针数组p1的字符串取出来,
2.把二维数组buf2的字符取出来,
3.上面的字符串放到p3,p3是在堆区分配的二维内存
4.对p3种字符串进行排序
参数:
p1:
len1:p1元素个数
buf2:
len2:buf2字符串行数
p3:二级指针的地址,需要在函数内分配内存,保存p1和buf2的字符串,还需要排序
len3:保存p3中的字符串个数
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sort(char** array1, int num1, char(*array2)[30],
int num2, char*** myp3/*out*/, int* num3)
{
if (array1 == NULL || array2 == NULL || myp3 == NULL || num3 == NULL)
{
return -1;
}
int i = 0, j = 0;
int n = num1 + num2;
char** p = (char**)malloc(n * sizeof(char*));
for (i = 0; i < n; i++)
{
if (i < num1)
{
p[i] = (char*)malloc((strlen(array1[i]) + 1) * sizeof(char));
strcpy(p[i], array1[i]);
}
if (i >= num1)
{
p[i] = (char*)malloc((strlen(array2[i - num1]) + 1) * sizeof(char));
strcpy(p[i], array2[i - num1]);
}
}
char* tmp = NULL;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(p[i], p[j]) > 0)
{
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
*myp3 = p;
*num3 = num1 + num2;
return 0;
}
void free_buf(char*** p, int n)
{
if (p == NULL)
{
return;
}
int i = 0;
char** temp = *p;
for (i = 0; i < n; i++)
{
if (temp[i] != NULL)
{
free(temp[i]);
temp[i] = NULL;
}
}
if (temp != NULL)
{
free(temp);
*p = NULL;
}
}
int main()
{
int ret = 0;
char* p1[] = { "aa","ccccccc","bbbbbb" };
char buf2[][30] = { "111111","3333333","222222" };
char** p3 = NULL;
int len1, len2, len3, i = 0;
len1 = sizeof(p1) / sizeof(*p1);
len2 = sizeof(buf2) / sizeof(buf2[0]);
ret = sort(p1, len1, buf2, len2, &p3, &len3);
if (ret != 0)
{
printf("sort error:%d\n", ret);
return ret;
}
printf("before sort:\n");
for (i = 0; i < len3; i++)
{
if (i < len1)
{
printf("%s, ", p1[i]);
}
else
printf("%s, ", buf2[i - len1]);
}
printf("\n\nafter sort:\n");
for (i = 0; i < len3; i++)
{
printf("%s, ",p3[i]);
}
//释放p3所指向内存
//在函数内部把p3的值赋值为NULL
free_buf(&p3, len3);
printf("\n");
system("pause");
return 0;
}
C语言将字符串数组进行排序
最新推荐文章于 2024-07-30 22:28:05 发布