999666123 2021-12-18 12:24 采纳率: 100%
浏览 67
已结题

字符串排序问题(指针数组)函数怎么拼接呢?

1、设计函数char ** create1( int n ) ;,根据整数n创建一个长度为n的字符指针型动态一维数组,并返回动态数组第一个元素的地址。

2、设计函数char * create2( int n ) ;,根据整数n创建一个长度为n的字符型动态一维数组,并返回动态数组第一个元素的地址。

3、设计函数void sort( char** strArray , int size ) ; ,该函数可将字符指针数组strArray所指向的所有字符串按从小到大排列。

输入第一行为一个不超过200的整数n,代表待排序字符串的个数。然后输入n个字符串,每个字符串长度不会超过100。

输出为排序后的n个字符串,每个字符串占一行。

函数接口定义一:
char ** create1( int n ) ;
其中 n 为字符指针数组的长度; 函数需返回动态数组第一个元素的地址。如果没有获得内存则返回NULL。

函数接口定义二:
char * create2( int n ) ;
其中 n 为字符数组的长度; 函数需返回动态数组第一个元素的地址。如果没有获得内存则返回NULL。

函数接口定义三:
void sort( char** strArray , int size ) ;
其中 strArray 和 size 都是用户传入的参数。 strArray 为字符指针数组; size 是数组的长度。函数没有返回值。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 101

char ** create1( int n ) ;
char * create2( int n ) ;
void sort( char** strArray , int size ) ;

int main()
{
char** strArray ;
int n , i ;

scanf("%d",&n) ;
strArray = create1( n ) ; 
if ( strArray != NULL ) 
{
    for ( i = 0 ; i < n ; i++ ) 
    {
        strArray[i] = create2( MAX ) ;
        if ( strArray[i] == NULL ) return -1 ;
    }            
}
else return -1 ;//这里两个 return -1 都是无法获得内存时直接结束程序 

getchar();//吃掉前边输入的回车符 

for( i = 0 ; i < n ; i++ ) 
    gets(strArray[i]); //读入字符串 

sort( strArray , n ) ; //排序 

for( i = 0 ; i < n ; i++ ) 
    printf("%s\n",strArray[i]); //输出

for ( i = 0 ; i < n ; i++ )  
    free(strArray[i]) ;
free(strArray) ;

return 0;

}

/* 请在这里填写答案 */
输入样例:
10
Bb b
zzz zzz
aab bbccc
aaabbaaa
abb bbb
ccidfjD
Aidj idj
Ccidf jD
sidfjijE EE
kkkkkk

输出样例:
Aidj idj
Bb b
Ccidf jD
aaabbaaa
aab bbccc
abb bbb
ccidfjD
kkkkkk
sidfjijE EE
zzz zzz

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-12-21 09:32
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define  MAX 101
    char** create1(int n);
    char*  create2(int n);
    void   sort(char** strArray, int size);
    int main()
    {
        char** strArray;
        int n, i;
        scanf("%d", &n);
        strArray = create1(n);
        if (strArray != NULL)
        {
            for (i = 0; i < n; i++)
            {
                strArray[i] = create2(MAX);
                if (strArray[i] == NULL) return -1;
            }
        }
        else return -1;//这里两个 return -1 都是无法获得内存时直接结束程序 
        getchar();   //吃掉前边输入的回车符 
        for (i = 0; i < n; i++)
            gets(strArray[i]); //读入字符串 
        sort(strArray, n); //排序 
        for (i = 0; i < n; i++)
            printf("%s\n", strArray[i]); //输出
        for (i = 0; i < n; i++)
              free(strArray[i]);
         free(strArray);
        return 0;
    }
    char** create1(int n)
    {
        char** str = (char**)malloc(sizeof(char*) * n);
        if (str == NULL)
            return NULL;
        else
            return str;
    }
    char* create2(int n)
    {
        char* str_i = (char*)malloc(sizeof(char) * n);
        if (str_i == NULL)
            return NULL;
        else
            return str_i;
    }
    void  sort(char** strArray, int size)
    {
        int i, j;
        char* tmp;
        for (i = 0; i < size - 1; i++) {
            for (j = 0; j < size - i - 1; j++) {
                if (strcmp(strArray[j], strArray[j + 1]) > 0) {
                    tmp = strArray[j];
                    strArray[j] = strArray[j + 1];
                    strArray[j + 1] = tmp;
                }
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败