指针(3)计算最长的字符串长度(本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度)以及就题讲解malloc函数

发布时间:2023年12月20日

题目要求

本题要求实现一个函数,用于计算有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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。