当前位置: 首页 > news >正文

[字符串操作] 有年代的病历单

有年代的病历单

题目描述

小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是例子)

  1. 原文中所有的字符都被循环左移了三个单位(dec -> abz)
  2. 逆序存储(abcd -> dcba )
  3. 大小写反转(abXY -> ABxy)

关于输入

共n+1行
第一行是名单中名字的个数n(1<=n <= 1000)
随后是n行,每行是一个加密的字符串。(串长小于12)

关于输出

n行
按照字典顺序输出解密后的字符串

例子输入

5
WDDFSSP
SDSDSDDo
SDKGGFSIa
LLLHFGFOl
GSOOWFASOq

例子输出

Dlvijjngv
Orijikooo
Rggvgvgv
Trvdizrrvj
svviggz

解题分析

我们的主要目标是解密一组加密的字符串并按照字典序排序。加密的规则包括:所有字符循环左移三个单位,字符串逆序存储,以及大小写反转。程序的主要步骤如下:

  1. 读取输入:首先,程序读取一个整数n,表示名单中名字的个数。然后,程序读取n个加密的字符串。

  2. 解密字符串:程序对每个字符串进行解密。解密过程包括三个步骤:

    • 大小写反转:如果字符是小写,那么将其转换为大写,反之亦然。这可以通过对字符进行ASCII码的加减操作来实现。

    • 字符串逆序:将字符串中的字符按照反向顺序重新排列。这可以通过交换字符串中的对应字符来实现。

    • 字符循环左移三个单位:对所有字符进行循环左移三个单位。这可以通过对字符的ASCII码进行加减和模运算来实现。

  3. 排序字符串:程序使用C标准库中的qsort函数对解密后的字符串进行排序。qsort函数需要一个比较函数,这里使用的是strcmp函数,它可以按照字典序比较两个字符串。

  4. 输出结果:程序按照顺序打印出排序后的字符串。

主要思想是将解密过程分解为几个简单的步骤,并对每个步骤进行实现。然后,程序使用标准库函数对解密后的字符串进行排序。这种分解问题和利用标准库的方法使得程序的实现变得简单和清晰。

代码实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>char ss[1005][15];void reverse(char *s){int n = strlen(s);for(int i=0; i<n; i++){if(s[i]>='a' && s[i]<='z'){s[i]='A'-'a'+s[i];}else if(s[i]>='A' && s[i]<='Z'){s[i]='a'-'A'+s[i];}}
}void fz(char *s){int n = strlen(s);for(int i=0,j=n-1;i<=j;i++,j--){char temp=s[j];s[j]=s[i];s[i]=temp;}
}void yw(char *s){int n = strlen(s);for(int i=0;i<n;i++){if(s[i]>='a' && s[i]<='z'){s[i]=(s[i]-'a'+3+26)%26+'a';}else if(s[i]>='A' && s[i]<='Z'){s[i]=(s[i]-'A'+3+26)%26+'A';}}
}int comp(const void *a, const void *b){return strcmp((char *)a, (char *)b);
}int main() {int n; scanf("%d", &n);for(int i=0; i<n; i++){scanf("%s", ss[i]);reverse(ss[i]);fz(ss[i]);yw(ss[i]);}qsort(ss, n, sizeof(ss[0]), comp);for(int i=0;i<n;i++){printf("%s\n", ss[i]);}return 0;
}

进一步拓展

qsort是C语言标准库中的一个函数,用于对数组进行快速排序。它的函数原型如下:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*));

各个参数的含义如下:

  • base:指向要排序的数组的指针。
  • nitems:数组中元素的数量。
  • size:数组中每个元素的大小,通常使用sizeof运算符来获取。
  • compar:一个比较函数的指针,这个函数用于比较数组中的两个元素。比较函数应该接受两个void指针作为参数,并返回一个整数。如果第一个元素小于第二个元素,比较函数应该返回负数;如果两个元素相等,比较函数应该返回零;如果第一个元素大于第二个元素,比较函数应该返回正数。

下面是一个使用qsort函数对整数数组进行排序的例子:

#include <stdio.h>
#include <stdlib.h>int compare(const void *a, const void *b) {return (*(int*)a - *(int*)b);
}int main() {int arr[] = {10, 5, 15, 12, 90, 80};int n = sizeof(arr)/sizeof(arr[0]);qsort(arr, n, sizeof(int), compare);for(int i=0; i<n; i++) {printf("%d ", arr[i]);}return 0;
}

在这个例子中,比较函数compare接受两个void指针作为参数,将它们转换为int指针,然后比较两个int值。qsort函数使用这个比较函数来排序整数数组。

qsort函数的平均时间复杂度和最好情况下的时间复杂度都是 O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n是要排序的元素的数量。这是因为快速排序算法是一种分治算法,它将数组分为两个子数组,然后递归地对这两个子数组进行排序。在平均情况和最好情况下,快速排序算法可以均匀地分割数组,所以其时间复杂度是 O ( n log ⁡ n ) O(n \log n) O(nlogn)

然而,在最坏情况下,快速排序算法的时间复杂度是 O ( n 2 ) O(n^2) O(n2)。这种情况发生在数组已经完全排序或完全逆序的情况下,快速排序算法不能均匀地分割数组,而是生成一个空的子数组和一个包含 n − 1 n-1 n1个元素的子数组。这导致算法的递归深度为 n n n,所以最坏情况下的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

然而,最坏情况在实际应用中很少发生,而且可以通过一些策略(如随机化或者使用"三者取中"法)来避免。所以在实际应用中,qsort函数的时间复杂度通常可以视为 O ( n log ⁡ n ) O(n \log n) O(nlogn)

qsort函数中使用的compare函数,其参数是两个const void*类型的指针。这两个指针是指向待排序数组中元素的指针,所以它们不应该是空指针。实际上,它们应该指向待比较的两个元素。

void*类型的指针是一种特殊的指针类型,它可以指向任何类型的数据。在compare函数中,你需要将这两个void*类型的指针转换为正确的类型,然后进行比较。

例如,如果你正在排序一个int类型的数组,那么你的比较函数可能会像这样:

int compare(const void *a, const void *b) {int int_a = *((int*) a);int int_b = *((int*) b);// Perform comparisonif (int_a < int_b) return -1;else if (int_a == int_b) return 0;else return 1;
}

在这个例子中,指针ab被转换为int*类型的指针,然后通过解引用操作获取它们指向的整数值。然后,这两个整数值被比较,并返回相应的结果。

strcmp是C语言标准库中的一个函数,用于比较两个字符串。它的函数原型如下:

int strcmp(const char *str1, const char *str2);

strcmp函数接受两个字符串(实际上是两个字符指针)作为参数,并返回一个整数。这个整数的值取决于两个字符串的字典序比较结果:

  • 如果 str1 在字典序上小于 str2strcmp 将返回一个负整数。
  • 如果 str1 在字典序上等于 str2strcmp 将返回零。
  • 如果 str1 在字典序上大于 str2strcmp 将返回一个正整数。

这里的"字典序"是指字符串中字符的ASCII码值的比较。例如,字符串"apple"在字典序上小于字符串"banana",因为’a’的ASCII码值小于’b’。

以下是一个使用strcmp函数的例子:

#include <stdio.h>
#include <string.h>int main() {char str1[] = "apple";char str2[] = "banana";char str3[] = "apple";printf("%d\n", strcmp(str1, str2));  // 输出:-1printf("%d\n", strcmp(str1, str3));  // 输出:0printf("%d\n", strcmp(str2, str1));  // 输出:1return 0;
}

在这个例子中,strcmp函数用于比较三个字符串。第一次比较返回-1,因为"apple"在字典序上小于"banana";第二次比较返回0,因为两个"apple"字符串相等;第三次比较返回1,因为"banana"在字典序上大于"apple"。

相关文章:

[字符串操作] 有年代的病历单

有年代的病历单 题目描述 小英是药学专业大三的学生&#xff0c;暑假期间获得了去医院药房实习的机会。 在药房实习期间&#xff0c;小英扎实的专业基础获得了医生的一致好评&#xff0c;得知小英在计算概论中取得过好成绩后&#xff0c;主任又额外交给她一项任务&#xff0c…...

怎么批量提取文件名字到Excel中?

怎么批量提取文件名字到Excel中&#xff1f;Excel是由微软公司开发的一种电子表格软件&#xff0c;它是Microsoft Office办公套件的一部分。Excel提供了强大的数据处理和分析功能&#xff0c;用户可以使用Excel创建、编辑和管理电子表格&#xff0c;进行各种计算、数据分析、图…...

QT搭建的Ros/librviz的GUI软件

1.前言 开发初期学习了下面博主的文章&#xff0c;也报了他在古月局的课&#xff0c;相当于感谢吧。 ROS Qt5 librviz人机交互界面开发一&#xff08;配置QT环境&#xff09;-CSDN博客​​​​​​​r 软件前期也是参考他的开源项目 GitHub - chengyangkj/Ros_Qt5_Gui_App …...

Docker 概述与安装

文章目录 1. Docker简介2. 传统虚拟机和容器3. Docker运行速度快的原因4. Docker软件4.1 Docker镜像4.2 Docker容器4.3 Docker仓库 5. Docker架构6. CentOS安装Docker6.1 卸载旧版本6.2 配置yum资源库6.3 安装Docker引擎6.4 启动docker引擎6.5 设置开机自启 7. 卸载Docker8. 运…...

JS作用域与作用域链

让我为大家介绍一下作用域与作用域链吧&#xff01; 作用域 作用域规定了变量能够访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a;局部作用域&#xff0c;全局作用域 一、局部作用域 局部作用域分为函数作用域与块作用域 1.函数作…...

elmentui 查看大图组件 点击图片关闭弹窗方法

elmentui 查看大图组件 点击图片关闭弹窗方法 html <el-imageref"Imgs":src"item.url ? item.url : ":preview-src-list"item.url ? [item.url] : []"click.stop"handlePreviewClose"class"alarm_img"/>js //图片…...

蓝桥杯官网练习题(最长子序列)

题目描述 我们称一个字符串S 包含字符串 T 是指 T 是 S 的一个子序列&#xff0c;即可以从字符串 S 中抽出若干个字符&#xff0c;它们按原来的顺序组合成一个新的字符串与 T 完全一样。 给定两个字符串 S 和 T&#xff0c;请问 T 中从第一个字符开始最长连续多少个字…...

Make sure that using this pseudorandom number generator is safe here.

问题类型&#xff1a;安全热点 安全问题级别&#xff1a;MEDIUM 一、问题代码 工具类Package&#xff1a; Java commons-lang3 库 RandomUtils 随机数工具类 import org.apache.commons.lang3.RandomUtils; 用法&#xff1a; RandomUtils.nextInt(0, 999999999) //生成 0…...

【C/C++】常见模拟题题解

题解 模拟双目运算符一元二次方程求解水仙花数统计学生成绩学生成绩管理模拟选举大小写字符转换最大公约数、最小公倍数字符串反序 模拟双目运算符 编写一个根据用户键入的两个操作数和一个双目运算符&#xff0c;由计算机输出结果的程序。 #include<stdio.h>int opera…...

TikTok 购物和直播的 5 个简单技巧

TikTok 的一切都很大&#xff1a;应用程序下载量、受众规模和病毒式营销活动。因此&#xff0c;该公司多方面进军社交商务也就不足为奇了。是的&#xff0c;这将是巨大的。自去年年底以来&#xff0c;TikTok Shopping 和TikTok 直播购物活动已在一些市场上线&#xff0c;并将于…...

神经网络中BN层简介及位置分析

1. 简介 Batch Normalization是深度学习中常用的技巧&#xff0c;Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (Ioffe and Szegedy, 2015) 第一次介绍了这个方法。 这个方法的命名&#xff0c;明明是Standardization, 非…...

BGP基础配置

EBGP是AS之间 IBGP是AS内 R1-R2是EBGP,R4-R5是EBGP R2-R3-R4是IBGP 第一步基础配置&#xff1a;IP地址 [r1-GigabitEthernet0/0/0]ip ad 12.0.0.1 24 [r1-LoopBack0]ip ad 1.1.1.1 32 [r2-GigabitEthernet0/0/0]ip ad 12.0.0.2 24 [r2-LoopBack0]ip ad 2.2.2.2 32 [r2-Loop…...

【开题报告】基于深度学习的驾驶员危险行为检测系统

研究的目的、意义及国内外发展概况 研究的目的、意义&#xff1a;我国每年的交通事故绝对数量是一个十分巨大的数字&#xff0c;造成了巨大的死亡人数和经济损失。而造成交通事故的一个很重要原因就是驾驶员的各种危险驾驶操作行为。如果道路驾驶员的驾驶行为能够得到有效识别…...

Linux云服务器打包部署前端Vue项目

1. 打包 在项目包的终端使用命令打包成dist文件。 npm run build2. Linux云服务器上创建文件夹 mkdir /home/www/dist注&#xff1a;dist文件夹不用创建&#xff0c;将打包好的dist.zip放进去&#xff0c;然后解压就行。 3. 安装nginx yum install -y nginx4. 修改配置文件…...

Egg.js中Cookie和Session

Cookie HTTP请求是无状态的&#xff0c;但是在开发时&#xff0c;有些情况是需要知道请求的人是谁的。为了解决这个问题&#xff0c;HTTP协议设计了一个特殊的请求头&#xff1a;Cookie。服务端可以通过响应头&#xff08;set-cookie&#xff09;将少量数据响应给客户端&#…...

与 PCIe 相比,CXL为何低延迟高带宽?

文章目录 前言1. LatencyPCIE 生产者消费则模型结论Flit 包PCIE/CXL.ioCXL.cace & .mem总结 2. BandWidth常见开销CXL.IO Link efficiencyPCIe Link efficiencyCXL.IO bandwidthCXL.mem/.cache bandwidth 参考 前言 CXL 规范里没有具体描述与PCIe 相比低延时高带宽的原因&…...

Vue 入门指南:从零开始学习 Vue 的基础知识

&#x1f95d;VUE官方文档 注意&#xff1a; &#x1f4d2;Vue 2 将于 2023 年 12 月 31 日停止维护。详见 Vue 2 延长 LTS。&#x1f4d2;Vue 2 中文文档已迁移至 v2.cn.vuejs.org。&#x1f4d2;想从 Vue 2 升级&#xff1f;请参考迁移指南。 文章目录 &#x1f341;前言&am…...

11.docker的网络-docker0的理解及bridge网桥模式的介绍与实例

1.docker0的基本理解 安装完docker服务后&#xff0c;我们首先查看一下宿主机的网络配置 ifconfig我们可以看到&#xff0c;docker服务会默认在宿主机上创建一个虚拟网桥docker0&#xff0c;该网桥网络的名字称为docker0。它在内核层连通了其他物理或者虚拟网卡&#xff0c;这…...

新材料制造ERP用哪个好?企业应当如何挑选适用的

有些新材料存在特殊性&#xff0c;并且在制造过程中对车间、设备、工艺、人员等方面提出更高的要求。还有些新材料加工流程复杂&#xff0c;涉及多种材料的请购、出入库、使用和管理等环节&#xff0c;解决各个业务环节无缝衔接问题是很多制造企业面临的管理难题。 新材料制造…...

vr小鼠虚拟解剖实验教学平台减少了受感染风险

家畜解剖实验教学是培养畜牧兽医专业学生实际操作能力的专业教学活动中的核心手段。采取新型教学方式与手段&#xff0c;合理设置实验教学内容&#xff0c;有助于激发学生的操作积极性&#xff0c;促进实践教学的改革。 家畜解剖VR仿真教学是一种借助VR虚拟现实制作和web3d开发…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...