指针(3)计算最长的字符串长度(本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度)以及就题讲解malloc函数
2023-12-20 08:05:25
题目要求
本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。
函数接口定义:
int max_len( char *s[], int n );
其中n
个字符串存储在s[]
中,函数max_len
应返回其中最长字符串的长度。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 10
#define MAXS 20
int max_len( char *s[], int n );
int main() {
int i, n;
char *string[MAXN] = {NULL};
scanf("%d", &n);
for(i = 0; i < n; i++) {
string[i] = (char *)malloc(sizeof(char)*MAXS);
scanf("%s", string[i]);
}
printf("%d\n", max_len(string, n));
return 0; }
/* 你的代码将被嵌在这里 */
输入样例:
4
blue
yellow
red
green
输出样例:
6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
解题代码
int max_len(char* s[], int n) {
int i, len;
len = strlen(s[0]);
for (i = 1; i < n; i++) {
if (len < strlen(s[i]))
len = strlen(s[i]);
return len;
}
}
解题步骤
说实在的,这题我感觉难在代码理解。
尤其是这行?这是啥?
string[i] = (char*)malloc(sizeof(char) * MAXS);
(char*)是强制类型转换,将void*(默认malloc
函数返回的是void*
类型的指针)转换成char*型指针。
为什么要强制类型转换?
void*
是一种无类型指针,可以指向任何类型的数据。但是,由于void*
是无类型的,因此不能直接进行指针运算或解除引用。为了使用void*
指针,需要将其转换为特定类型的指针。
malloc函数是啥?
这行代码是在为指针数组中的每个元素分配内存。
malloc
函数用于动态分配内存,sizeof(char) * MAXS
表示要分配的内存大小,char*
表示分配的内存类型为字符型指针。
因此,string[i] = (char*)malloc(sizeof(char) * MAXS)
的作用是为指针数组string
中的第i
个元素分配一个大小为MAXS
的字符型指针数组。
我感觉相当于直接将数组空间进行分配
如果我们想要一个N大小(N<1000)的数组空间,我们多半会开辟一个很大很大的数组空间然后再放进去内容)
int a[10000];
int N = 0; //比较习惯初始化一下
scanf("%d",&N);
for (int i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
如果要是这么干,VS2019至少会报错,并跟你干架
int N;
int a[N];
那么这样就会导致空间浪费,如何设立动态空间并进行存储,malloc是一个好的选择。
文章来源:https://blog.csdn.net/etamaos/article/details/135096686
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!