函数返回多个值的应用

news2024/10/4 11:15:40

还是通过一个编程的例子来介绍函数返回多个值的应用。
举例:编写一个C 函数,该函数在一个字符串中找到可能的最长的子字符串并打印出来,该字符串是由同一字符组成的。
分析:这个字符串是存放在字符数组里的,要打印出来这个最长的字符串,就要知道最长子字符串的字符组成及其长度,也就是说,如果写一个函数实现这个功能,函数就得返回这样两个值,即字符和其长度。
方法一:定义全局变量。
通过把我们想要知道的字符和长度定义为全局变量,然后在函数中通过比较和计算找到这两个值,并将其赋值给我们定义的全局变量即可,函数虽然没有返回值,但是全局变量的值已经改变了。
定义全局变量实现的代码如下。

#include <stdio.h>

int max;
char c;
void ChildString(char *p) 
{  
	int stringlen=0,len=1,maxlen=1; 
	int i=0,j=1;
	char *q;
	q = p;
	while(*q!='\0') 
	{
		stringlen++;    //统计字符串长度
		q++;
	}
	while(i < stringlen)  
	{
		if(*(p+i)==*(p+j) && j < stringlen)
		{  
			len++;        //统计子串长度
		}  
		else  
		{  
			if(len > maxlen)      //统计最大子串长度
			{  
				maxlen = len; 
				c = *(p+i);
			}          
			len = 1;
		}  
		i++;
		j++;
	}
	max = maxlen;  
}

void main()
{
	char a[100];
	printf("Please input a string: \n");
	gets(a);
	ChildString(a);
	printf("The longest child string is : \n");
	for(int i = 0; i < max; i++)
		printf("%c",c);
	printf("\n");
}

方法二:返回静态指针。
通过定义一个静态数据,将需要的两个值存放进来,由于需要的两个值一个是整型一个是字符型,因此需要将其中的一个进行转换存放,相对来说比较麻烦,但是如果是相同类型的值,这个方法还是比较好的。
当然也可以将这个静态数组定义为全局变量,结果是一样的。
定义静态指针实现的代码如下。

#include <stdio.h>

//int a[2];
int *ChildString(char *p) 
{  
	int stringlen=0,len=1,maxlen=1; 
	int i=0,j=1;
	static int a[2];  //函数执行结束时不被释放
	char c;
	char *q;
	q = p;
	while(*q!='\0') 
	{
		stringlen++;    //统计字符串长度
		q++;
	}
	while(i < stringlen)  
	{
		if(*(p+i)==*(p+j) && j < stringlen)
		{  
			len++;        //统计子串长度
		}  
		else  
		{  
			if(len > maxlen)      //统计最大子串长度
			{  
				maxlen = len; 
				c = *(p+i);
			}          
			len = 1;
		}  
		i++;
		j++;
	}
	a[0] = c-'0';
	a[1] = maxlen;
	return a;  
}

void main()
{
	char a[100];
	printf("Please input a string: \n");
	gets(a);
	int *p;
	p = ChildString(a);
	printf("The longest child string is : \n");
	for(int i = 0; i < *(p+1); i++)
		printf("%c",*p+'0');
	printf("\n");
}

方法三:定义结构体。
通过定义结构体存放不同类型的变量,在需要返回很多个值时,定义结构体这种方法的优势就非常明显了。
定义结构体实现的代码如下。

# include <stdio.h>

typedef struct{
	int max;
	char c;
}Array;

Array ChildString(char *p)
{
	Array result;
	int stringlen=0,len=1,maxlen=1;
	int i=0,j=1;
	char *q;
	q = p;
	while(*q != '\0')
	{
		stringlen++;
		q++;
	}
	while(i < stringlen)
	{
		if(*(p+i)==*(p+j) && j < stringlen)
		{
			len++;
		}
		else
		{
			if(len > maxlen)
			{
				maxlen = len;
				result.c = *(p+i);
			}
			len = 1;
		}
		i++;
		j++;
	}
	result.max = maxlen;
	return result;
}

void main()
{
	Array result;
	char a[100];
	printf("Please input a string: \n");
	gets(a);
	result = ChildString(a);
	printf("The longest child string is : \n");
	for(int i = 0; i < result.max; i++)
		printf("%c",result.c);
	printf("\n");
}

程序运行结果如下图所示。
在这里插入图片描述
当然也可以在主函数中修改代码,可以让用户循环输入,直到输入特定的字符串后退出,如下图所示。
在这里插入图片描述
以上就是函数返回多个值应用的几种简单方法,希望本文对你有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/953191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源埋雷?一文带你看清安全风险!

导读 当前&#xff0c;国际形势中不稳定、不确定和不安全因素日益突出&#xff0c;各个行业中都存在没有硝烟的战争。在信息技术领域&#xff0c;由于去年俄乌冲突爆发&#xff0c;Oracle、SAP公司宣布暂停俄罗斯所有业务&#xff0c;Github考虑限制俄开发人员访问开源代码存储…

JS三座大山 —— 原型和原型链

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、原型是什么&#xff1f;二、原型链是什么&#xff1f;2.1 原型链全方面解析2.2 为什么构造函数也有原型&#xff1f; 总结 前言 理解原型和原型链可以帮助我们更好地理解 Java…

YOLOv5:解读general.py

YOLOv5&#xff1a;解读general.py 前言前提条件相关介绍general.pyclip_boxesscale_boxes ★ \bigstar ★xywh2xyxynon_max_suppression ★ ★ ★ \bigstar\bigstar\bigstar ★★★未完待续 参考 前言 记录一下自己阅读general.py代码的一些重要点&#xff0c;方便自己查阅。…

Java基础笔试题(一)

系列文章目录 Java基础知识题(一) Java基础知识题(二) Java基础知识题(三) Java基础知识题(四) Java基础知识题(五) 文章目录 系列文章目录 模块1 单选题1 单选题2 单选题2 单选题4 单选题5 模块2 单选题1 单选题2 补充一&#xff1a;理解is-a&#xff0c;has…

【python爬虫】5.爬虫实操(歌词爬取)

文章目录 前言项目&#xff1a;寻找周杰伦分析过程代码实现重新分析过程什么是NetworkNetwork怎么用什么是XHR&#xff1f;XHR怎么请求&#xff1f;json是什么&#xff1f;json数据如何解析&#xff1f;实操&#xff1a;完成代码实现 一个总结一个复习 前言 这关让我们一起来寻…

GraphQL渗透测试案例及防御办法

什么是GraphQL GraphQL 是一种 API 查询语言&#xff0c;旨在促进客户端和服务器之间的高效通信。它使用户能够准确指定他们在响应中所需的数据&#xff0c;从而有助于避免有时使用 REST API 看到的大型响应对象和多个调用。 GraphQL 服务定义了一个合约&#xff0c;客户端可…

【Linux系列】使用虚拟机安装Linux系统

首发博客地址 首发博客地址[1] 系列文章地址[2] 下载虚拟机 请从官网下载&#xff1a; https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/17_0 如需不限速下载&#xff0c;请关注【程序员朱永胜】并回复 1018…

自研的外贸搜索工具

全球智能搜索 独有的VVPN技术有效绕过各种限制获取国外搜索引擎数据 1.支持全球所有国家搜索引擎&#xff0c;及社交平台&#xff0c;精准定位优质的外贸客户. 2.全球任意国家地区实时采集. 3.搜索引擎全网邮箱电话采集 4.社交平台一键查看采集&#xff08;Facebook,Twitter,L…

基于Matlab实现频谱分析(附上源码+数据集)

Matlab是一个功能强大的数值计算和科学计算软件&#xff0c;可以用于频谱分析。频谱分析是一种信号处理技术&#xff0c;用于将时域信号转换为频域信号&#xff0c;以便更好地理解信号的频率特性。本文将介绍使用Matlab实现频谱分析的方法。 文章目录 部分源码完整源码数据集下…

Samba服务器

目录 一、什么是Samba&#xff1f; 二、Samba进程 三、Samba主要功能 四、Samba工作流程 五、Samba安全级别 六、Sam主配置文件/etc/samba/smb.conf 七、Samba服务配置案例 一、什么是Samba&#xff1f; Samba可以让linux计算机和windows计算机之间实现文件和打印机资源共享的一…

JavaWeb 速通Ajax

目录 一、Ajax快速入门 1.基本介绍 : 2.使用原理 : 二、Ajax经典入门案例 1.需求 : 2.前端页面实现 : 3. 处理HTTP请求的servlet实现 4.引入jar包及druid配置文件、工具类 : 5.Domain层实现 : 6.DAO层实现 : 7.Service层实现 : 8.运行测试 : 三、JQuery操作Ajax 1 …

Java:Stream流的使用步骤,中间方法,终结方法,收集Stream流

Stream流的相关知识 Stream流的使用步骤 1.获取Stream流 Stream流常见的中间方法 如果两个Stream流类型不一样&#xff0c;那么合并的时候就要变成Object类型 Stream流的常见的终结方法 转到数组中去

Angular安全专辑之四 —— 避免服务端可能的资源耗尽(NodeJS)

express-rate-limit是一个简单实用的npm包,用于在Express应用程序中实现速率限制。它可以帮助防止DDoS攻击和暴力破解,同时还允许对API端点进行流控。 express-rate-limit及其主要功能 express-rate-limit是Express框架的一个流行中间件,它允许根据IP地址或其他标准轻松地对请求…

中国智慧燃气行业市场需求

文章来源&#xff1a;中研普华产业研究院 关键词&#xff1a;智慧燃气、智慧燃气场站、智慧燃气平台、设备设施数字化、数字孪生、工业互联网 智慧燃气&#xff0c;是以城市输气管网为基础&#xff0c;各终端用户协调发展&#xff0c;以信息通信平台为支撑&#xff0c;具有信…

java spring cloud 企业工程管理系统源码+二次开发+定制化服务

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

解决 .csv 文件上传到 pgsql 的字符报错问题

目录 背景问题解决办法 背景 上传 .csv 文件进行数据导入到 pg 时&#xff0c;报错显示如下&#xff1a; ods.tbl_inp_fee_detail.csv数据上传失败 报错信息:org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Where: C…

NPDP认证|加班越多,产品经理的能力提升越快吗?

产品经理是现代企业中非常重要的职位&#xff0c;他们负责规划、设计、开发和推广公司的产品。为了使产品能够更好地满足市场需求&#xff0c;产品经理需要不断地提升自己的能力&#xff0c;以应对日益变化的竞争环境。有时&#xff0c;人们会认为加班是提高产品经理能力的途径…

链式栈StackT

C关键词&#xff1a;内部类/模板类/头插 C自学精简教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; 栈的内存结构 空栈&#xff1a; 有一个元素的栈&#xff1a; 多个元素的栈&#xff1a; 成员函数说明 0 clear 清空栈 clear 函数负责将栈的对内存释放…

[js逆向补环境专栏]过xhs的x2 x-s环境检测 -- part1

[补环境]过xhs的x2环境检测 – part1 Xhs的jsvmp用算法逆向确实容易头秃&#xff0c;扣代码对vmp而言也用处不大&#xff0c;此时补环境的重要性就出来了&#xff0c;通过把运行js的环境伪造得像浏览器一样&#xff0c;就能模拟出好像请求都是通过浏览器发起的一样。 这里要区…

光模块温度报警的原因及解决措施

光模块是数据中心网络中的关键组件&#xff0c;它们在高温环境下可能会受到影响。如果光模块的温度超过正常范围&#xff0c;可能会导致网络故障和光模块损坏。因此&#xff0c;了解光模块的温度报警并采取相应的解决措施非常重要。 一、光模块温度报警的原因 光模块温度报警通…