第5关:创建字符动态二维数组,顺序存放输入的一批字符串,然后求这批字符串的最大值
任务描述
本关任务:编写程序,创建字符二维动态数组,顺序存放输入的n
个字符串,然后求n
个字符串的最大值,字符串长度不超过20
。
相关知识
下面来讨论如何用动态数组存放字符串类型的数据。 一个字符串要用一个一维字符数组存放,多个字符串需用二维字符数组来存放。假设字符串的长度不超过20
,这里介绍两种创建方法。 创建和释放字符动态二维数组方法一:
char (*cs)[20]; //假设输入的字符串最大长度不超过20
int i,n;
scanf("%d",&n);// 输入字符串的个数
/*****申请n×20的字符数组*****/
if( (cs = (char (*)[20]) malloc( n*sizeof(char (*)[20]) ) == NULL)
{
printf("不能成功分配存储空间。\n");
exit(1);
}
/*****释放n×20的字符数组*****/
free(cs);
创建和释放字符动态二维数组方法二:
char **cs; //假设输入的字符串最大长度为19
int i,n;
scanf("%d",&n);// 输入字符串的个数
/*****申请长度为n的指针数组*****/
if( (cs =( char ** ) malloc( n*sizeof(char*) ) ) == NULL)
{
printf("不能成功分配存储空间。\n");
exit(1);
}
/*****循环申请长度为20的字符数组*****/
for(i=0;i<n;i++)
{
if( ( cs[i] = (char *) malloc(20*sizeof(char) ) ) == NULL )
{
printf("不能成功分配存储空间。\n");
exit(1);
}
}
/*****循环释放长度为20的字符数组*****/
for(i=0;i<n;i++)
{
free(cs[i]);
}
/*****释放长度为n的指针数组*****/
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 **********/