头歌链表实训5

第5关:创建字符动态二维数组,顺序存放输入的一批字符串,然后求这批字符串的最大值


任务描述

本关任务:编写程序,创建字符二维动态数组,顺序存放输入的n个字符串,然后求n个字符串的最大值,字符串长度不超过20

相关知识

  下面来讨论如何用动态数组存放字符串类型的数据。 一个字符串要用一个一维字符数组存放,多个字符串需用二维字符数组来存放。假设字符串的长度不超过20,这里介绍两种创建方法。   创建和释放字符动态二维数组方法一:

  1. char (*cs)[20]; //假设输入的字符串最大长度不超过20
  2. int i,n;
  3. scanf("%d",&n);// 输入字符串的个数
  4. /*****申请n×20的字符数组*****/
  5. if( (cs = (char (*)[20]) malloc( n*sizeof(char (*)[20]) ) == NULL)
  6. {
  7. printf("不能成功分配存储空间。\n");
  8. exit(1);
  9. }
  10. /*****释放n×20的字符数组*****/
  11. free(cs);

  创建和释放字符动态二维数组方法二:

  1. char **cs; //假设输入的字符串最大长度为19
  2. int i,n;
  3. scanf("%d",&n);// 输入字符串的个数
  4. /*****申请长度为n的指针数组*****/
  5. if( (cs =( char ** ) malloc( n*sizeof(char*) ) ) == NULL)
  6. {
  7. printf("不能成功分配存储空间。\n");
  8. exit(1);
  9. }
  10. /*****循环申请长度为20的字符数组*****/
  11. for(i=0;i<n;i++)
  12. {
  13. if( ( cs[i] = (char *) malloc(20*sizeof(char) ) ) == NULL )
  14. {  
  15. printf("不能成功分配存储空间。\n");
  16. exit(1);
  17. }
  18. }
  19. /*****循环释放长度为20的字符数组*****/
  20. for(i=0;i<n;i++)
  21. {
  22. free(cs[i]);
  23. }
  24. /*****释放长度为n的指针数组*****/
  25. free(cs);

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,创建字符二维动态数组,顺序存放输入的n个字符串,然后求n个字符串的最大值,字符串长度不超过20。具体要求如下:

  • 定义函数 input(),从后台获取数据,实现二维数组的输入;
  • 定义函数 maxnum(),找出二维数组的最大值,并返回位置结果;
  • 完善函数 main(),创建二维动态数组,最后释放内存。

测试说明

平台会对你编写的代码进行测试。

预期输入: 5 li wang zhang jin xiang

输入说明: 第一行为输入字符串的个数; 第一行后面的值为字符串的具体值。

预期输出: zhang

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void input(char (*s)[20],int n);
int maxnum(char (*s)[20],int n);

int main()
{
    int i,n,max;
    char (*cs)[20];
    scanf("%d",&n);     //输入字符串的个数
    //getchar();
    /**********申请n×20的字符二维动态数组**********/ 
    /********** Begin **********/ 
    cs=(char (*)[20])malloc(n*sizeof(char (*)[20]));
    /********** End **********/
    input(cs,n);
    max = maxnum(cs,n);
    puts(cs[max]);
    /********** 释放二维动态数组 **********/ 
    /********** Begin **********/ 
    free(cs);
    /********** End **********/
    return 0;
}
    /********** 自定义函数 **********/ 
    /********** Begin **********/ 
void input(char (*s)[20],int n)
{
    for(int i=0;i<n;i++)
    {
        scanf("%s",&s[i]);
    }
}
int maxnum(char (*s)[20],int n)
{    
    char  *max=*s;
    int k=0; 
  for(int i=0;i<n;i++)
  {
     if(strcmp(max,s[i])<0)
        {
            max=s[i];
            k=i;
        }
  }
  return k;
}
/********** End **********/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值