拉屎超人- 2021-12-28 19:43 采纳率: 75%
浏览 13

大概问题是字符串传参 递归 递归还有点思路 但是传参和返回一团乱麻

问题遇到的现象和发生背景

大概问题是 输入几个字符串 通过递归的方式给这几个字符串按字典顺序排序
最让我头疼的是它程序里先是申请了一个二维字符数组 作为参数传给一个专门输入字符串的子函数 返回之后又申请了一个字符串指针数组也就是char*a[]然后把这个字符串指针数组传进递归比较的函数里


```c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char** change(char **a,int n){
    if(n==1)
    return a; //递归返回条件(存疑点1)(不确定是否正确)
    else{
        char*b;
        int i,j;
        for(i=0;i<n-2;i++){
            if(strcmp(a[i],a[i+1])>0)  //找出整组字符串里最大的一个
            j=i;
        }
        b=a[n-1];
        strcpy(a[n-1],a[j]);  //把最大的字符串放到末尾
        strcpy(a[j],b);
        change(a,n-1); //再传入字符指针数组变短
    }
}
char** input(char **a,int n){
    int i;
    for(i=0;i<n;i++){  //(存疑点2)gets不知道对不对 也不知道用不用getchar()
        scanf("%s",a[i]);
    }
    return a;
}
int main(){
    int n;
    scanf("%d",&n);
    char**m;  //二维数组
    m=(char**)malloc(sizeof(char*)*n);  //动态申请空间
    int i,j,k;
    for(i=0;i<n;i++){
        m[i]=(char*)malloc(sizeof(char)*100);
    }
    m=input(m,n);
    char**a;
    a=(char**)malloc(sizeof(char*)*n);//字符串指针数组
    for(i=0;i<n;i++){  //不知道怎样把二维数组传进字符串指针数组
        a[i]=&m[i][100];
    }
    a=change(a,n); //完全不知道该怎么用
    for(i=0;i<n;i++){
        puts(m[i]);
    }
}


运行结果及报错内容

它运行不出东西

我的解答思路和尝试过的方法

传参和返回值 还有那个二维数组和字符串指针数组我完全不知道怎么用

我想要达到的结果
  • 写回答

2条回答 默认 最新

  • fuill 2021-12-28 20:11
    关注

    img

    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    void change(char **a,int n) {
        if(n==1)
            return ; //递归返回条件(存疑点1)(不确定是否正确)
        else {
            char*b;
            int i,j;
            for(i=0; i<n-2; i++) {
                if(strcmp(a[i],a[i+1])>0)  //找出整组字符串里最大的一个
                    j=i;
            }
            b=a[n-1];
            strcpy(a[n-1],a[j]);  //把最大的字符串放到末尾
            strcpy(a[j],b);
            change(a,n-1); //再传入字符指针数组变短
        }
    }
    void input(char **a,int n) {
        int i;
        for(i=0; i<n; i++) { //(存疑点2)gets不知道对不对 也不知道用不用getchar()
            scanf("%s",a[i]);
        }
        //return a;
    }
    int main() {
        int n;
        scanf("%d",&n);
        char**m;  //二维数组
        m=(char**)malloc(sizeof(char*)*n);  //动态申请空间
        int i,j,k;
        for(i=0; i<n; i++) {
            m[i]=(char*)malloc(sizeof(char)*100);
        }
        input(m,n);
        change(m,n);
       /* char**a;
        a=(char**)malloc(sizeof(char*)*n);//字符串指针数组
        for(i=0; i<n; i++) { //不知道怎样把二维数组传进字符串指针数组
            a[i]=&m[i][100];
        }*/
       // a=change(a,n); //完全不知道该怎么用
        for(i=0; i<n; i++) {
            puts(m[i]);
        }
    }
    
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 12月28日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大