C++_第三周做题总结_指针2

id:13 A.月份查询(指针数组)

题目描述

已知每个月份的英文单词如下,要求创建一个指针数组,数组中的每个指针指向一个月份的英文字符串,要求根据输入的月份数字输出相应的英文单词
1月 January
2月 February
3月 March
4月 April
5月 May
6月 June
7月 July
8月 August
9月 September
10月 October
11月 November
12月 December

输入

第一行输入t表示t个测试实例

接着每行输入一个月份的数字

依次输入t行

输出

每行输出相应的月份的字符串,若没有这个月份的单词,输出error

输入样例

3
5
11
15

输出样例

May
November
error

题解

  • 首先定义一个包含12个指向字符串的指针数组pmonth,每个指针指向一个字符串,这些字符串表示月份的名称。const表示这些指针所指向的内容应该被视为常量,不可以被修改,防止修改字符串的内容。如果要输出第一个月的名称,可以使用pmonth[0]
  • 然后使用一个for循环,控制询问次数,将输入的数字存储到一个整型变量中,如果这个数字不是月份的数字,则输出error,然后直接进行到下一个循环语句,否则输出指到这个数字所代表的指针的值

代码实现

#include <iostream>
using namespace std;int main()
{int t, mon, i;const char *pmonth[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };cin >> t;for (i = 1; i <= t; i++){cin >> mon;if (mon < 1 || mon > 12){cout << "error" << endl;continue;}cout << pmonth[mon - 1] << endl;}return 0;
}

id:16 B.动态矩阵(指针与堆内存分配)

题目描述

未知一个整数矩阵的大小,在程序运行时才会输入矩阵的行数m和列数n

要求使用指针,结合new方法,动态创建一个二维数组,并求出该矩阵的最小值和最大值,可以使用数组下标法。

不能先创建一个超大矩阵,然后只使用矩阵的一部分空间来进行数据访问、

创建的矩阵大小必须和输入的行数m和列数n一样

输入

第一行输入t表示t个测试实例

第二行输入两个数字m和n,表示第一个矩阵的行数和列数

第三行起,连续输入m行,每行n个数字,表示输入第一个矩阵的数值

依次输入t个实例

输出

每行输出一个实例的最小值和最大值

输入样例

2
2 3
33 22 11
66 88 55
3 4
19 38 45 14
22 65 87 31
91 35 52 74

输出样例

11 88
14 91

提示

建立动态二维数组
int** a = new int* [m];
for (i = 0; i < m; i++)
{a[i] = new int[n];...
}
对应释放空间
for (i = 0; i < m; i++)
{delete[] a[i];
}
delete[] a;

题解

  • 首先定义一个指向指针的指针**array
  • 然后一个for循环,遍历测试样例,输入矩阵的行数和列数,然后分配一个大小为m的int指针数组,这将用于创建一个二维数组,表示矩阵array = new int* [m];,接着一个for嵌套循环,for (j = 0; j < m; j++),用于为每一行分配一个大小为n的int数组array[j] = new int[n];,接着读入矩阵的元素,将其存储在二维数组array中
  • 令最大最小值都等于二维数组的第一个元素,将其初始化,然后再用两个for循环遍历整个二维数组,更新最大最小值
  • 最后释放动态的内存

代码实现

#include <iostream>
using namespace std;int main()
{int t, m, n, i, **array, j, k, max, min, x, y;cin >> t;for (i = 1; i <= t; i++){cin >> m >> n;array = new int* [m];for (j = 0; j < m; j++){array[j] = new int[n];}for (j = 0; j < m; j++){for (k = 0; k < n; k++){cin >> array[j][k];}}max = array[0][0];min = array[0][0];for (x = 0; x < m; x++){for (y = 0; y < n; y++){if (array[x][y] < min){min = array[x][y];}if (array[x][y] > max){max = array[x][y];}}}cout << min << " " << max << endl;for (j = 0; j < m; j++){delete[]array[j];}delete []array;}return 0;
}

id:11 C.矩阵左转(指针与数组)

题目描述

输入一个2*3的矩阵,将这个矩阵向左旋转90度后输出

比如现在有2*3矩阵 :

1 2 3

4 5 6

向左旋转90度后的矩阵变为:

3 6

2 5

1 4

要求:除了矩阵创建和数据输入可以使用数组和数组下标的方法,其他过程对矩阵的任何访问都必须使用指针

提示:m行n列的二维矩阵,第i行第j列的元素与首元素的距离为i*n+j,序号从0开始计算

输入

第一行输入t表示有t个测试实例

连续两行输入一个2*3的矩阵的数据

依次输入t个实例

输出

依次输出左转后的矩阵结果

在输出的每行中,每个数据之间都用空格隔开,最后一个数据后面也带有空格

输入样例

2
1 2 3
4 5 6
4 5 6
7 8 9

输出样例

3 6
2 5
1 4
6 9
5 8
4 7

题解

  • 首先要定义两个用于分别存储矩阵元素输入和输出的数组
  • 然后一个for循环遍历要处理的数组,接着声明一个指向二维数组a第一个元素的指针p,然后通过指针p来输入矩阵a的元素
  • 接着从旋转前后数组元素的位置坐标的关系得出正确的映射关系,并使用指针将结果存储在b数组中
  • 最后输出b数组中的元素即可

代码实现

#include <iostream>
using namespace std;int main()
{int t, i, j, k, a[2][3], b[3][2];cin >> t;for (i = 1; i <= t; i++){int* p = &a[0][0];for (j = 0; j < 2; j++){for (k = 0; k < 3; k++){cin >> *(p + j * 3 + k); // 矩阵的输入}}for (j = 0; j < 3; j++){for (k = 0; k < 2; k++){b[j][k] = *(p + (k * 3 + 2 - j)); // 旋转}}for (j = 0; j < 3; j++) // 输出{for (k = 0; k < 2; k++){cout << b[j][k] << " ";}cout << endl;}}return 0;
}

id:10 D.三串合一(指针与字符数组)

题目描述

输入三个字符串,通过指针读取各个字符串的子串(子串是指字符串中连续的一小部分),把它们合并成一个新字符串

要求:

  1. 三个字符串的创建和输入可以使用数组,也可以不用

  2. 输入后,根据三个字符串的子串的长度,计算出新字符串的长度

  3. 使用动态数组的方法创建新的字符串,并且使用指针读取三个字符串的不同部分,并且复制到新字符串中,要求整个过程都不能使用数组下标

  4. 使用指针输出新的字符串

输入

第一行输入t表示有t个测试实例

连续三行输入三个字符串,每个字符串都包含10个字符

连续三行,每行输入数字a和b,表示每个子串的开始和结束位置。注意字符串的位置是按照一般意义从1开始计算,和编程中的数组位置不同。例如字符串abcdefg,开始位置是3,结束位置是5,那么子串就是cde

依次输入t个实例

输出

每行输出合并后的新字符串

输入样例

2
abcdefghij
ABCDEFGHIJ
aabbccddee
3 5
2 6
8 10
AABBCCDDEE
ffgghhiijj
FFGGHHIIJJ
1 4
5 8
2 7

输出样例

cdeBCDEFdee
AABBhhiiFGGHHI

题解

  • 首先声明了三个字符数组,然后读取三个字符串,接着声明六个整型变量,分别表示每个字符串的字串的起始和结束位置,然后计算新字符串的长度
  • 动态分配一个字符数组,其大小为length + 1,多出来的1用来存储字符串结束标志’\0’,声明一个指针ptr, 指向新字符串的起始位置,用于执行复制操作
  • 对每个字符串的字串进行复制,使用ptr1指向str1的起始位置,然后通过while循环将str1的子串复制到new_str中,类似的…
  • 复制结束后,将ptr指向新字符串的末尾,并添加字符串结束标志\0,输出新字符串,释放动态分配的内存

代码实现

#include <iostream>
using namespace std;int main()
{int t, i, length;cin >> t;for (i = 0; i < t; i++){char str1[20], str2[20], str3[20];cin >> str1 >> str2 >> str3; // 输入三个字符串int sta1, end1, sta2, end2, sta3, end3;cin >> sta1 >> end1; // 子串开始结束位置cin >> sta2 >> end2;cin >> sta3 >> end3;length = (end1 - sta1 + 1) + (end2 - sta2 + 1) + (end3 - sta3 + 1);char* new_str = new char[length + 1]; // 动态数组存储新字符串char* ptr = new_str; // 执行复制操作的指针char* ptr1 = str1 + sta1 - 1; // 指向数组的开始位置while (ptr1 <= str1 + end1 - 1) // 复制到指向新字符串的指针{*ptr = *ptr1;ptr++;ptr1++;}char* ptr2 = str2 + sta2 - 1;while (ptr2 <= str2 + end2 - 1){*ptr = *ptr2;ptr++;ptr2++;}char* ptr3 = str3 + sta3 - 1;while (ptr3 <= str3 + end3 - 1){*ptr = *ptr3;ptr++;ptr3++;}*ptr = '\0'; // 字符串的结束cout << new_str << endl;delete[] new_str;}return 0;
}

id:14 E.字符串的比较(指针与字符)

题目描述

编写一个函数比较两个字符串,参数是两个字符指针(要求显式定义,例如char *S, char *T),比较字符串S和T的大小。如果S大于T,则返回1,如果S小于T则返回-1,如果S与T相等则返回0。

比较规则:

1.把两个字符串的相同位置上的字符进行比较,字符的大小比较以ASCII值为准

2.在比较中,如果字符串S的字符大于字符串T的字符的数量超过小于的数量,则认为S大于T,如果等于则S等于T,如果小于则S小于T

例如S为aaccdd,T为eebbbb,每个位置比较得到S前两个字母都小于T,但后4个字母都大于T,最终认为S大于T

3.如果两个字符串长度不同,则更长的字符串为大

在主函数中输入两个字符串,并调用该函数进行判断,在判断函数中必须使用函数参数的指针进行字符比较

输入

输入t表示有t个测试实例

接着每两行输入两个字符串,字符串的最大长度不超过20

依次输入t个实例

输出

每行输出一个实例的比较结果

输入样例1

3
aaccdd
eebbbb
AAbb++
aaEE*-
zznnkk
aaaaaaa

输出样例1

1
0
-1

输入样例2

2
aaaaaaa
zznnkk
eebbbb
aaccdd

输出样例2

1
-1

题解

  • 首先声明一个名为cmp的函数,该函数接受两个字符指针为参数,返回一个整数。该函数的作用是比较两个字符串
  • 在main函数中,声明两个字符数组str1和str2,用于存储输入的;两个字符串,调用cmp函数,并将结果存储在result中
  • 在cmp函数中,使用while循环,直到其中一个字符串的结束符’\0’,在循环中,比较当前位置上两个字符的大小关系,循环结束后,若有一个字符串还没有遍历完,则根据其长度来判断其相对位置,长度较长的字符串认为更大

代码实现

#include <iostream>
using namespace std;
int cmp(char* S, char* T); // 比较两个字符串int main()
{int t, i, result;cin >> t;for (i = 0; i < t; i++){char str1[21], str2[21];cin >> str1 >> str2;result = cmp(str1, str2);cout << result << endl;}return 0;
}int cmp(char* S, char* T)
{int cntS, cntT, i;cntS = 0;cntT = 0;while (*S != '\0' && *T != '\0'){if (*S > *T){cntS++;}else if (*S < *T){cntT++;}S++;T++;}if (*S != '\0'){return 1;}if (*T != '\0'){return -1;}if (cntS > cntT){return 1;}else if (cntS == cntT){return 0;}else{return -1;}
}

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

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

相关文章

行业回暖?这个行业岗位需求飙升6倍!程序员们提前恭喜了!

前言 随着今年史上最长春节假期正式收官&#xff0c;各行各业相继进入开工节奏&#xff0c;就业市场开启持续升温模式。 今年开工首周&#xff0c;人才需求增长明显&#xff0c;求职者活跃度大大增多&#xff0c;就业市场进入了繁忙有序的节奏&#xff0c;呈现出春招市场的勃…

Android获取某个app首次安装时间和更新时间

在Android中&#xff0c;可以使用PackageManager类来获取应用程序的安装时间和上次更新时间。以下是如何实现的一般步骤&#xff1a; 以微信为例&#xff1a; 获取一个PackageManager的实例。使用PackageManager的getPackageInfo方法&#xff0c;传入微信的包名&#xff08;通…

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…

Linux性能测试工具整理

性能测试工具&#xff1a;Unixbench lmbench stream iozone fio netperf spec2000 spec2006 一、unixbench unixbench主要是用于系统基础性能测试&#xff0c;unixbench也包含一些非常简单的2D和3D图形测试 UnixBench一个基于系统的基准测试工具&#xff0c;不单纯是CPU 内存 …

在window命令行中,使用conda创建新的虚拟环境时出现的问题以及解决办法

一.出现的问题 C:\Users\zhu>conda create -n ML python3.8 Collecting package metadata (current_repodata.json): failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/current_repodata.js…

南京大学AI考研,宣布改考408!

官网还没通知 附上南大与同层次学校近四年的分数线对比&#xff0c;整体很难 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 如果确定要冲南大的话建议提早调整自己的复习路线&…

Springboot中使用@Async注解7大失效场景及解决方案

Springboot中使用Async注解7大失效场景及解决方案 前言正文场景一&#xff1a;调用者与被调用者在同一个类中解决方案 场景二&#xff1a;配置类未启用异步支持解决方案 场景三&#xff1a;方法不是 public 的解决方案 场景四&#xff1a;线程池未正确配置解决方案 场景五&…

Combining external-latent attention for medical image segmentation

结合外部潜在注意的医学图像分割 摘要 注意机制是提高医学图像分割性能的新切入点。如何合理分配权重是注意力机制的关键,目前流行的方法包括全局压缩和使用自注意操作的非局部信息交互。然而,这些方法过于关注外部特征,缺乏对潜在特征的开发。全局压缩方法通过全局均值或…

C01 C++ Modding

Modding Programs running on a user-controlled computer are amenable to “modding” . If a piece of information, such as an integer representing health or lives, exists in RAM, one may find and edit it to their liking. Taken to the extreme, entirely new …

threejs 模型聚焦定位

需求&#xff1a;鼠标选中模型&#xff0c;然后点击定位按钮&#xff0c;将相机平移到模型跟前&#xff0c;相机视线不变 var box new THREE.Box3();//包围盒box.expandByObject(model);//model是模型var center new THREE.Vector3();box.getCenter(center);//获取中心点var …

测试人员如何进行需求分析?

在进行测试用例设计之前&#xff0c;我们通常需要对需求文档进行分析&#xff0c;甚至在需求评审阶段从测试角度给出建议。通过需求分析&#xff0c;不仅可以输出测试点&#xff0c;也可以发现需求中存在的问题。 业务角度和技术角度 测试需求的分析可以从两个不同的角度进行…

介绍5款 世界范围内比较广的 5款 mysql Database Management Tool

介绍5款 世界范围内比较广的 5款 Mysql Database Management Tool 文章目录 介绍5款 世界范围内比较广的 5款 Mysql Database Management Tool前言MySQL Workbench&#xff1a;Navicat Premium&#xff1a;DBeaver Community&#xff1a;HeidiSQL&#xff1a;SQLyog&#xff1a…

如何解决node-sass下载用的还是过期的淘宝源?

下载node-sass发现报错过期的证书 把npm的淘宝源换成最新的https://registry.npmmirror.com后发现还是指向了以前的淘宝源&#xff0c;看到一位博主说&#xff0c;单改npm源不够还要改下载node-sass的源&#xff0c;再次搜索另外一位博主提供了命令npm config ls可以使用它来查…

文件包含漏洞之包含NGINX日志文件(常用)

条件&#xff1a;知道目标服务器的日志文件存贮路径&#xff0c;并且存在文件包含漏洞 首先对目标服务器发送一次含有木马的请求&#xff0c;目的是让目标服务器日志中生成含有木马的日志记录。因为发送过程中&#xff0c;使用了url编码&#xff0c;我们抓包进行更改成能够执行…

图文详解io_uring高性能异步IO架构

说到高性能网络编程&#xff0c;我们第一时间想到的是epoll机制&#xff0c;epoll很长一段时间统治着整个网络编程江湖&#xff0c;然而io_uring的出现&#xff0c;似乎在撼动epoll的统治地位&#xff0c;今天我们来揭开io_uring的神秘面纱。 1.io_uring简介 io_uring是一个L…

竞赛 - 基于机器视觉的图像拼接算法

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…

Mac 使用 pip install mysqlclient 爆错 error: subprocess-exited-with-error 解决办法

在虚拟环境中安装 mysqlclient 发生报错&#xff1a; pipenv install mysqlclient报错如下&#xff1a; ERROR:pip.subprocessor:Getting requirements to build wheel exited with 1 [ResolutionFailure]: File "/Users/zhangyongxin/.local/share/virtualenvs/movie…

express+mysql+vue,从零搭建一个商城管理系统16--收货地址(全国省市县名称和code列表)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建config/area.js二、新建models/address.js三、新建dao/address.js四、新建routes/address.js五、添加地址六、查询用户地址列表总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写serv…

Spring Data访问Elasticsearch----脚本和运行时字段Scripted and runtime fields

Spring Data访问Elasticsearch----脚本和运行时字段Scripted and runtime fields 一、person 实体二、存储库接口三、service类四、脚本化字段Scripted fields五、运行时字段Runtime fields Spring Data Elasticsearch支持脚本(scripted)字段和运行时(runtime)字段。有关此方面…

浅谈大模型“幻觉”问题

大模型的幻觉大概来源于算法对于数据处理的混乱&#xff0c;它不像人类一样可以by the book&#xff0c;它没有一个权威的对照数据源。 什么是大模型幻觉 大模型的幻觉&#xff08;Hallucination&#xff09;是指当人工智能模型生成的内容与提供的源内容不符或没有意义的现象。…