[字符串操作]挑选最大值序列

挑选最大值序列

题目描述

给出了若干行非负整数序列,请选择最大值所在的序列,按输入原样输出该序列。如果最大值出现在多个序列,则只输出最大值最后出现的序列。
假设:每个序列中至少有1个整数,至多300个整数,每个整数的长度不超过4位。

关于输入

第1行:整数序列的个数N
后面有 N 个整数序列,每个序列中的整数之间以逗号间隔;

关于输出

按原样输出其中的一个整数序列

例子输入
5
12,13,10,18,108,20
17,20,30,20,36,40,55,86,92
25,66,89,63,66,79
77,79,88,0,076,096,009,008,108
32,63,12,82,068,5
例子输出
77,79,88,0,076,096,009,008,108
解题分析

本题可以一边读入数据,一边寻找最大的值并记录,需要注意的是,本题输入数据带有前导0,这就很讨厌了,我们需要对字符串进行操作,其中使用了strtok,stol函数来帮助我们。

代码实现
#include <iostream>
#include <cstring>
using namespace std;char nums[10000][305][5];
char array1[1500]; char array2[1500];int main() {int n; scanf("%d",&n);int maxN=0,maxi;for(int i=0;i<n;i++){int k=0;char *temp;scanf("%s",array1);sprintf(array2,",%s,",array1);temp=strtok(array2,",");while(temp!=NULL){strcpy(nums[i][k++],temp);if(atol(temp)>=maxN){maxN=atol(temp);maxi=i;}strcpy(nums[i][k],"-1");temp=strtok(NULL,",");}}for(int j=0;strcmp(nums[maxi][j],"-1")!=0;j++){if(j==0)printf("%s",nums[maxi][j]);elseprintf(",%s",nums[maxi][j]);}return 0;
}

这个程序的主要目标是找出包含最大整数的序列,并且如果有多个序列包含相同的最大整数,则输出最后一个包含该最大整数的序列。程序采用了以下步骤来实现这个目标:

  1. 输入序列的数量:首先,程序从输入中读取整数序列的数量n。

  2. 读取并处理每个序列:然后,程序进入一个循环,对每个序列进行处理。在每次循环中,程序首先读取一个序列(以字符串形式),然后使用strtok函数将序列中的每个整数提取出来,并将其复制到二维字符数组nums中。

  3. 查找最大整数:在提取整数的同时,程序使用atol函数将整数从字符串形式转换为长整数形式,并与当前的最大整数maxN进行比较。如果找到了一个更大的整数,或者找到了一个与maxN相等但出现在更后面的序列中的整数,程序就更新maxNmaximaxi是包含最大整数的序列的索引)。

  4. 输出包含最大整数的序列:最后,程序输出包含最大整数的序列。它通过遍历nums[maxi]数组来实现这一点,直到遇到"-1"(这是每个序列的结束标志)。

程序的主要思路是:在读取和处理每个序列的同时,找出包含最大整数的序列。这样,当所有序列都处理完后,程序就可以直接输出结果,无需再进行额外的搜索或比较操作。这是一种典型的"一边处理,一边查找最优解"的策略,可以有效地减少计算和存储需求。

进一步拓展

trtok是C语言中的一个函数,用于分割字符串。其函数原型为:

char *strtok(char *str, const char *delim);

这个函数接受两个参数:一个是待分割的字符串str,另一个是作为分隔符的字符串delim。函数返回一个指向下一个分割出的子串的指针。如果没有更多的子串可分割,那么函数返回NULL。

strtok的工作原理是:在str字符串中找到第一个delim中包含的字符,然后将这个字符替换为\0,并将指针指向这个字符后面的第一个字符。如果str已经是NULL,那么strtok会从上次分割的位置开始,继续查找下一个分隔符。

需要注意的是,strtok在使用时会修改原始字符串,所以如果你不希望原始字符串被修改,那么在使用strtok之前,应该先将原始字符串复制到另一个缓冲区。

程序中,strtok函数用来分割每个输入的整数序列。每个序列是一个以逗号分隔的整数列表,如"12,13,10,18,108,20"。

首先,程序将每个输入序列作为一个字符串读入。然后,这个字符串被复制到另一个字符串array2中,并在其前后添加了逗号。这样做的目的是确保strtok可以正确地分割出序列中的第一个和最后一个整数。

然后,程序调用strtok函数,以逗号作为分隔符来分割array2

temp=strtok(array2,",");

strtok函数在这里的作用是找到array2中的第一个逗号,并将其替换为\0,然后返回一个指向array2的指针。这个指针指向的就是序列中的第一个整数。

在后续的调用中,strtok的第一个参数是NULL,这表示strtok应该从上次分割的位置开始,继续查找下一个逗号,并返回一个指向下一个整数的指针:

temp=strtok(NULL,",");

strtokarray2中找不到更多的逗号时,它会返回NULL。这时,程序知道已经处理完了当前的整数序列,可以开始处理下一个序列。

总的来说,strtok在你的程序中的作用是把每个输入序列分割成一系列的整数,以便程序可以逐个处理这些整数。

sprintf是C语言中的一个函数,用于将格式化的数据写入字符串。它是printf函数的一种变体,只不过printf是将格式化的数据写入标准输出(通常是屏幕),而sprintf则是将格式化的数据写入字符串。

sprintf的函数原型为:

int sprintf(char *str, const char *format, ...);

这个函数接受一个字符串指针str作为第一个参数,一个格式字符串format作为第二个参数,然后是一个可变数量的额外参数。函数会根据format字符串来格式化额外的参数,并将结果写入str字符串。函数返回写入的字符数量(不包括最后的空字符)。

format字符串可以包含普通的字符和格式说明符。普通的字符会被原样复制到str字符串,而格式说明符会被替换为额外参数的值。格式说明符以%字符开始,然后是一个或多个格式控制字符。例如,%d表示一个整数,%f表示一个浮点数,%s表示一个字符串等。

例如,下面的代码:

char str[50];
int a = 10;
float b = 3.14;
sprintf(str, "a = %d, b = %f", a, b);

会将字符串"a = 10, b = 3.140000"写入str

除了sprintf外,还有几个相关的函数:

  1. printf:将格式化的数据写入标准输出。

  2. fprintf:将格式化的数据写入文件。它的函数原型为int fprintf(FILE *stream, const char *format, ...);,其中stream是一个文件指针,指向要写入的文件。

  3. snprintf:将格式化的数据写入字符串,但是可以指定最大写入的字符数量。这可以防止写入的数据超过字符串的大小,从而导致缓冲区溢出。它的函数原型为int snprintf(char *str, size_t size, const char *format, ...);,其中size是最大写入的字符数量。

  4. scanffscanfsscanf:这些函数与上面的函数相反,它们是从标准输入、文件、字符串中读取格式化的数据。

这些函数都是C语言中处理输入/输出的重要工具,通过它们,你可以方便地在程序中处理各种数据。

sscanf是C语言中的一个函数,用于从一个字符串中读取格式化的输入。这个函数与scanf类似,只不过scanf是从标准输入(通常是键盘)读取输入,而sscanf则是从一个字符串读取输入。

sscanf的函数原型为:

int sscanf(const char *str, const char *format, ...);

这个函数接受一个字符串str作为第一个参数,一个格式字符串format作为第二个参数,然后是一个可变数量的额外参数。函数会根据format字符串来解析str字符串,并将结果存储到额外的参数中。函数返回成功解析并存储的项的数量。

format字符串可以包含普通的字符和格式说明符。普通的字符(包括空格)必须与str字符串中的字符完全匹配,而格式说明符则用于解析str字符串中的值。格式说明符以%字符开始,然后是一个或多个格式控制字符。例如,%d用于解析一个整数,%f用于解析一个浮点数,%s用于解析一个字符串等。

例如,下面的代码:

char *str = "123 456.789 hello";
int a;
float b;
char c[10];
sscanf(str, "%d %f %s", &a, &b, c);

这段代码会解析字符串"123 456.789 hello",并将解析的结果存储到变量ab和数组c中。解析后,a的值为123,b的值为456.789,c的值为"hello"。

sscanf是一个非常强大的函数,可以用来解析各种格式的字符串。然而,使用它时需要小心,因为如果format字符串和str字符串不匹配,或者额外的参数不足以存储解析的结果,那么可能会导致未定义的行为。

在C语言中,我们有一些函数可以将字符串转换为不同类型的数字:

  1. atoi:这个函数将字符串转换为int类型的整数。其函数原型为:

    int atoi(const char *str);
    

    这个函数会扫描参数str字符串,跳过前面的空白字符,直到遇到第一个非空白字符。然后,如果这个字符是一个有效的整数字符(如一个数字或正负号),函数会继续扫描,直到遇到一个无效的整数字符为止。然后,函数会将这个整数字符序列转换为一个int值。

  2. atolatoll:这两个函数的功能与atoi类似,只不过它们分别将字符串转换为longlong long类型的整数。

  3. atof:这个函数将字符串转换为double类型的浮点数。其函数原型为:

    double atof(const char *str);
    

    这个函数的工作原理与atoi类似,只不过它会将整数字符序列转换为一个double值。

下面是一个使用atoiatof的例子:

char *str1 = "123";
char *str2 = "456.789";
int num1 = atoi(str1);
double num2 = atof(str2);

在这个例子中,num1的值为123,num2的值为456.789。

除了上述函数,你还可以使用sscanf函数来解析更复杂的字符串。sscanf函数可以根据一个格式字符串来解析输入字符串,并将结果存储到指定的变量中。例如:

char *str = "123 456.789";
int num1;
double num2;
sscanf(str, "%d %lf", &num1, &num2);

在这个例子中,sscanf函数会将字符串"123 456.789"解析为一个整数和一个浮点数,然后将这两个数的值分别存储到num1num2中。解析后,num1的值为123,num2的值为456.789。

这些函数为在C语言中处理字符串和数字之间的转换提供了强大的工具,但是使用它们时需要注意,如果输入字符串不是一个有效的数字,那么这些函数可能会产生不可预期的结果。

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

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

相关文章

可替代LM5145,5.5V-100V Vin同步降压控制器_SCT82A30

SCT82A30是一款100V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输入电压下降期间&am…

(Spring学习08)Spring之容器配置类解析过程源码解析

解析配置类 解析配置类流程图&#xff1a;https://www.processon.com/view/link/5f9512d5e401fd06fda0b2dd 解析配置类思维脑图&#xff1a;https://www.processon.com/view/link/614c83cae0b34d7b342f6d14 在启动Spring时&#xff0c;需要传入一个AppConfig.class给Applicat…

CNS0创建交货单没有WBS元素

1、问题 CNS0创建交货单带不出WBS&#xff0c;但是交货单过账之后&#xff0c;又可以读取到WBS。 2、原因 2.1、项目挂料 创建项目挂料时&#xff0c;当物料为通用料&#xff0c;则在网络中挂料时&#xff0c;采购类型为网络预留 当物料为专用料&#xff0c;则在网络中挂料时…

触摸键检测IC TS223——2.0V~5.5V 低功耗和宽工作电压 SSOP16、SOT-23-6封装形式

TS223是触摸键检测IC&#xff0c;提供1个触摸键。触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的。低功耗和宽工作电压是触摸键的DC和AC特点。采用SSOP16、SOT-23-6的封 装形式封装。 主要特点&#xff1a; ● 工作电压2.0V~5.5V ● 工作电流VDD3V&#xff0c; 无…

JavaScript强制类型转换

强制类型转换&#xff1a; 强制类型转换&#xff1a;指将其他的数据类型转换为string、number、boolean 将其他数据类型转换为字符串String()&#xff1a; 方法一&#xff1a; - 可以通过调用被转换值的toString()方法来将其转换为字符串 - 调用xxx的yyy方法 --> xxx.yy…

debian12 最小化安装桌面 i3wm

怕记不住&#xff0c;先临时记录一下&#xff0c;还未整理&#xff0c;先凑合着看 debian12 最小安装 i3wm 一、先安装 debian12 最小安装 软件包只选择最后的两个 SSH服务&#xff0c;和管理工具 安装后查看IP&#xff0c;并用另一台电脑 ssh 连接操作&#xff0c;这样比较…

Android WebView 响应缓存 笔记

Android WebView 响应缓存 在 Android开发中&#xff0c;经常用到 WebView 进行 Hybrid 模式开发&#xff0c;而 缓存是 常见的优化方式。 一、WebView 缓存模式 Android WebView 通过 WebSettings.setCacheMode 设置缓存方式。 有 5 种模式&#xff0c;实际现在 4 种&#…

教你用JMeter做接口测试的几个简单实例

前言 这次小项目是基于HTTP协议的接口&#xff0c;通过JMeter来完成一次基本的接口测试&#xff0c;完整复习一下JMeter的基本操作。 在实际项目中&#xff0c;测试也要先从开发那拿到接口说明书&#xff0c;分析熟悉业务后&#xff0c;写接口的测试用例&#xff0c;最后再在…

Java毕业设计—vue+SpringBoot调查问卷管理系统

研究目的 在进入21世纪以后&#xff0c;互联网得到了蓬勃的发展&#xff0c;电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后&#xff0c;传统问卷还存在很多弊端&#xff1a; 问卷分发起来比较困难&#xff0c;并且分发试卷耗费大量的金钱和时间&#xff1…

2024年金科《数字媒体技术》专业参考书目及考试大纲

《计算机网络基础》考试大纲 一、参考书目&#xff1a; 《计算机网络技术与应用&#xff08;第 2 版&#xff09;》&#xff0c;段标、张玲主编&#xff0c;电子工业出版社. 二、考试形式&#xff1a; 闭卷&#xff0c;考试时间 90 分钟 三、考试内容和要求 &#xff08;一…

Visual Studio(VS)常用快捷键(最详细)

Visual Studio常用快捷键 一、生成&#xff1a;常用快捷键二、调式&#xff1a;常用快捷键三、编辑&#xff1a;常用快捷键四、文件&#xff1a;常用快捷键五、项目&#xff1a;常用快捷键六、重构&#xff1a;常用快捷键七、工具&#xff1a;常用快捷键八、视图&#xff1a;常…

Echarts多图表动态更新示例

前端框架(html、echarts、jquery) <!DOCTYPE html> <html><head><meta charset"utf-8"><title>echarts多图表动态更新示例</title><script src"jquery.min.js"></script><script type"text/java…

强大的TFTP工具:Transfer免激活最新版

Transfer for Mac功能介绍 从头开始编写的Transfer可以完全控制您的文件传输&#xff0c;同时可以与现有的TFTP客户端完美兼容。Transfer附带对常见TFTP协议扩展和选项的支持&#xff0c;包括&#xff1a; RFC 2347-TFTP选项扩展 RFC 2348-TFTP块大小选项 RFC 2349-TFTP超时…

SystemUI下拉通知菜单栏定时自动隐藏

前言 在系统应用开发过程中&#xff0c;常常遇到一些特殊的需求&#xff0c;Android原生的应用并无此适配&#xff0c;此时需要对系统应用进行定制化开发。 目前遇到的这样一个需求&#xff1a;下拉通知菜单栏时&#xff0c;定时8秒后自动关闭通知菜单栏。通知菜单栏为Sytstem…

Python面经【11】- Python可迭代对象一网打尽专题

Python面经【11】- Python可迭代对象一网打尽专题 可迭代对象Python的迭代器、生成器1) 迭代器2) 生成器 可迭代对象、迭代器的区别12. 生成器、迭代器的区别什么是装饰器&#xff1f;函数装饰器有什么作用一句话解释什么样的语言能够使用装饰器Python中的作用域&#xff1f;什…

自卑与自信,自爱的人最幸福

自信与自卑的区别&#xff0c;重要的一点是评价机制的差异 自信的人对自己有一个整体的评价&#xff0c;他们运用内在的评价机制&#xff0c;他们习惯从自己身上找原因&#xff0c;尊重自己内在的感觉&#xff0c;按照自己的直觉行事。也就是说&#xff0c;不管别人如何评价&am…

Linux CentOS7 Docker安装Jenkins

1 sudo yum update #确保yum包更新到最新 service network restart #重启网络 2、查询镜像 docker search jenkins 3、拉取镜像 docker pull jenkins/jenkins #拉取镜像 4、创建Jenkins工作目录&#xff0c;并将容器内目录挂载到此目录…

远程服务器——如何在Conda中安装R环境

目录 1. R的安装2. VScode 配置参考文献 1. R的安装 推荐使用anaconda或者miniconda&#xff0c;创建虚拟环R_env境然后安装R&#xff1b; 使用conda search r-base查看可下载的R的版本&#xff1b;R版本比较低&#xff0c;一般可以先增加源&#xff1a; % 增加源 conda con…

垂直领域大模型算法团队招聘AIGC算法工程师(社招/实习)

base 北京 根据实习表现有转正名额&#xff0c;目前实习HC比较宽松&#xff0c;社招有HC但审批不太容易。 联系方式&#xff1a;leayc 艾特 hotmail.com 请标题注明【CSDN求职】并附简历 【职责】 负责领域大模型的继续预训练&#xff08;pre-training&#xff09;、微调对齐…

计算机视觉技术在智慧城市建设中的应用

计算机视觉技术在智慧城市建设中的应用 随着城市化进程的不断推进&#xff0c;更多的人们选择在城市生活、工作和娱乐。面对快速增长的人口和日益复杂的城市环境&#xff0c;很多城市开始探索智慧城市的建设。智慧城市的核心就是将现代信息技术应用于城市管理中&#xff0c;以…