第四天2017/03/31(下午2:结构体、数组)

本文介绍如何使用二级指针实现字符数组的排序。通过将两个字符数组合并并排序后输出,展示了动态内存分配、字符串操作及排序算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【作业】二级指针做输出(在被调函数中分配空间,主调函数中使用)
//实现的目标:把两个字符数组作为输入,排好序保存到另外一个字符数组中。
#include<iostream>
using namespace std;

char** sort(char Arr1[][10],int num1,char **Arr2,int num2)
{
    int len = num1+num2;
//在被调函数中定义变量Arr3,并分配内存空间,最后return返回给主函数main(即二级指针作输出)
    char** Arr3 = (char **)malloc(sizeof(char*)*len); //定义Arr3,并分配内存空间
    for(int l=0;l<len;l++)
    {
        Arr3[l] = (char*)malloc(sizeof(char)*100); //相当于动态分配len个数组
        memset(Arr3[l],0,sizeof(char)*100);
    }
//把Arr1、Arr2拷贝给Arr3
    int i=0;
    int j=0;
    for(i=0;i<num1;i++)
    {
        strcpy(Arr3[i],Arr1[i]);
    }
    for(j=0;j<num2;j++)
    {
        strcpy(Arr3[i+j],Arr2[j]);
    }

//对Arr3进行排序
    for(int m=0;m<len;m++)
    {
        for(int n=m+1;n<len;n++)
        {
            if(strcmp(Arr3[m],Arr3[n])>0)
            {
                //交换(方法一:动态数组的strcpy)
                //char ch[100] = {'\0'}; //静态分配内存空间
                //strcpy(ch,Arr3[m]);
                //strcpy(Arr3[m],Arr3[n]);
                //strcpy(Arr3[n],ch);

                //交换(方法二:Arr3[i]作为指针,指向字符串,对指针进行交换)
                char *ch=NULL; //记得定义的时候进行初始化
                ch = Arr3[m];
                Arr3[m] = Arr3[n];
                Arr3[n] = ch;
            }
        }
    }
    return Arr3;  //return返回给主函数main
}
void print_Arr(char **Arr3,int num)
{
    for(int i=0;i<num;i++)
    {
        cout<<Arr3[i]<<endl;
    }
}
void free_Arr(char** Arr,int num) //释放
{
    for(int i=0;i<num;i++)
    {
        if(Arr[i]!=NULL)
        {
            free(Arr[i]);
            Arr[i]=NULL;
        }
    }
    free(Arr);
    Arr=NULL;
}

int main()
{
    char** Arr3 = NULL;
    char Arr1[][10] = {"Cc","DD","AA","FF","BBB"};
    char *Arr2[10] = {"QQQ","BBBB","HHHHH"};
    Arr3 = sort(Arr1,5,Arr2,3);
    print_Arr(Arr3,8);
    free_Arr(Arr3,8);

    getchar();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值