将2个字符串数组连接之后进行排序

/*
功能:1.把指针数组p1的字符串取出来
      2.把二维数组buf2的字符取出来
      3.上面的字符串放在p3,p3是在堆区分配的二维内存
      4.对p3中字符串进行排序,通过strcmp()进行排序
参数:
    p1:指针数组首地址,char *p1[] = { "aa", "ccccccc", "bbbbbb" };
    len1:p1元素个数
    buf2:二维数组首元素地址,char buf2[10][30] = { "111111", "3333333", "222222" };
    len2:buf2字符串的行数
    p3:二级指针的地址,需要在函数内分配二维内存,保存p1和buf2的字符串,还需要排序
    len3:保存p3中的字符串个数
    返回值:

*/
//int sort(char **array1, int num1, char(*array2)[30], int num2,char ***myp3 /* out*/, int*num3)
/*
int ret = 0;
char *p1[] = { "aa", "ccccccc", "bbbbbb" };
char buf2[10][30] = { "111111", "3333333", "222222" };
char **p3 = NULL;
int len1, len2, len3, i = 0;
len1 = sizeof(p1) / sizeof(*p1);
len2 = sizeof(buf2)/sizeof(buf2[0]);
*/

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>   
#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;
    }
    char **buf ;
    buf= (char**)malloc(sizeof(char *)* (num1+num2));
    if (buf == NULL)
    {
        return -2;
    }
    for (int i = 0; i < (num1+num2); i++)
    {
        buf[i] = (char*) malloc(sizeof(char)*30);
        if (buf[i] == NULL)
        {
            return -3;
        }
    }

    for (int i = 0;i<num1;i++)
    {
        //buf[i] = array1[i];
        strcpy(buf[i], array1[i]);
    }
    for (int j = 0; j < num2; j++)
    {
        strcpy(buf[num1 + j], array2[j]);
        //buf[num1 + j] = array2[j];
    }
    for (int i = 0; i < num1 + num2; i++)
    {
        for (int j = i+1; j < num1 + num2; j++)
        {
            if (strcmp(buf[i],buf[j])>0)
            {
                char *tmp = buf[i];
                     buf[i] = buf[j];
                     buf[j] = tmp;

            }

        }
    }
    *num3 = num1 + num2;
    *myp3 = buf;
    return 0;
}
int main(void)
{
    int ret = 0;
    char *p1[] = { "aa", "ccccccc", "bbbbbb" };
    char buf2[][30] = { "111111", "3333333", "222222" };
    char **p3 = NULL;
    int len1=NULL, len2=NULL, len3 = NULL, i = 0;
    len1 = sizeof(p1) / sizeof(*p1);
    len2 = sizeof(buf2)/sizeof(buf2[0]);

    ret = sort(p1, len1, buf2, len2, &p3, &len3);


    for (int i = 0; i < len3;i++)
    {
        printf("%s\n", p3[i]);  

    }
    for (int i = 0; i < len3; i++)
    {
        if (p3[i] != NULL)
        {
            free(p3[i]);
            p3[i] = NULL;
        }

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

    system("pause");

    return 0;
}

内存分配图

猜你喜欢

转载自blog.csdn.net/qq_23859701/article/details/79832729