6-37 实验10_11_字符串排序(指针数组) (100 分)

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;
}

/* 请在这里填写答案 */

输入样例:

5
bbb
zzzzzz
aabbbccc
aaaaaa
abbbbb

输出样例:

aaaaaa
aabbbccc
abbbbb
bbb
zzzzzz

代码如下:

char** create1(int n)
{
	char** a;
	a = (char**)malloc(sizeof(char*) * n);
	if (a == NULL)
		return NULL;
	else
		return a;
}
char* create2(int n)
{
	char* a;
	a = (char*)malloc(sizeof(char) * n);
	if (a == NULL)
		return NULL;
	else
		return a;
}
void    sort(char** strArray, int size)
{
	int i,j;
	char* a;
	for (i = 0; i < size; i++)
	{
		for (j = 0; j < size - i - 1; j++)
		{
			if (strcmp(strArray[j], strArray[j + 1]) > 0)
			{
				a = strArray[j];
				strArray[j] = strArray[j + 1];
				strArray[j+1] = a;
			}
		}
	}
}

基本的排序方法,动态数组的申请熟练之后就能做了 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值