卡码网语言基础课 | 11. 句子缩写
目录
一、 字符串大小的比较
二、 ASCII码值
三、 基本框架代码
四、 解题思路
4.1 首字母问题
4.2 判定小写字母
4.3 小写字母转换为大写字母
五、空格判断
六、 代码模块化
6.1 满足的条件
6.2 代码完善
七、 题目解答
7.1 原始代码
7.2 改进代码
八、 拓展与延伸
8.1 形参和实参
8.2 引用
通过本次练习,将会学习到以下C++知识点:(同时强化字符串的练习)
- 字符大小的比较、字符运算、字符拼接
- ASCII码
getchar()函数的使用- 函数的定义和使用
- 函数的形参和实参
- 引用
&
题目:输出一个词组中每个单词的首字母的大写组合。输入中的第一行n代表,之后一共有n组输入数据。其中,每行单词多个,每个单词长度不一,单词之间空格数不一。
示例:
输入:
1
ad dfa fgs输出:
ADF
一、 字符串大小的比较
在字符集中的ASCII码值来确定
二、 ASCII码值

三、 基本框架代码
#include <iostream>
#include <string>
using namespace std;
int main(){int n;cin >> n; //输入接收n行getchar(); //从输入中获取一个字符}
注意这里使用了 getchar() 函数来吸收一个回车符,因为在输入 n 之后通常需要输入回车符才会输入下一行。
//原本: cout >> n >> endl;
之后仍然可以使用while循环来处理n行数据,每一行数据使用getline(cin, n) 来进行接收。
string s; // 定义变量s, 接收每行输入的字符串
while(n--) {getline(cin, s); // 从标准输入读取一行字符串,存储在字符串变量 s中string result; // 定义变量result, 用来输出经过处理后的结果
}
四、 解题思路
4.1 首字母问题
题目要求输出单词首字母为大写,即存在两种情况,第一种为直接就是大写,另一种就是为小写。
如果第一个字符是小写字符,则将之转换成大写字符,再进行拼接。
4.2 判定小写字母
小写字母从 'a' 到 'z' 对应的ASCII码值是从 97 到 122,且是连续的。
即如果输入的字符>=a, 并且<=z, 则一定在a和z的范围之内,也就是一定是小写字母。
// 如果第一个字符是小写字符
if (s[0] >= 'a' && s[0] <= 'z') {}
4.3 小写字母转换为大写字母
大小写字符之间的差值是32, 将小写字符做减法运算,就可以得到对应的大写字符。
// 如果输入的字符是小写字符,则进行转换
if (s[0] >= 'a' && s[0] <= 'z') {// ASCII码中小写字母和大写字母相差32s[0] -= 32;
}
result += s[0];// 将每行的第一个字符转换成大写后添加到result中
五、空格判断
因为在单词之间,存在数量不一的空格,因此需要做出合理判断。
for (int i = 1; i < s.size() - 1; i++) { // 单词之间可能有多个空格// 如果当前字符是空格,并且下一个字符不是空格if (s[i] == ' ' && s[i + 1] != ' ') {// 判定下一个字符是否是小写字母,如果是则转换成大写if (s[i + 1] >= 'a' && s[i + 1] <= 'z') {s[i + 1] -= 32;}// 将下一个字符拼接到结果result中result += s[i + 1]}
}
六、 代码模块化
由于4.2和4.3中的步骤和代码,在本次题目中重复使用,因此为了代码简洁和后续的方便维护和修改,需要将代码进行模块化操作,从而增加代码的复用性和可维护性。
6.1 满足的条件
如果想要定义一个将小写字符转换成大写字符的函数,需要满足以下条件:
- 返回类型:返回结果是经过转换后的大写字符,所以返回类型为
char - 函数名:可以自定义,这里使用
changeChar作为函数的名称 - 形参列表:之前的形参列表为空,而一般的形参列表通常包括参数类型和参数名称。参数类型表示参数的数据类型,可以是内置数据类型(例如整数、字符、浮点数等)、用户自定义的数据类型。参数名称通常是用来描述参数的有意义的名称,可以在函数体内部使用,这里接收一个字符作为输入,所以形参列表类型为
char, 参数名称可以用a表示, 引用传递&意味着函数可以修改传递给它的参数。
6.2 代码完善
// char代表返回类型,changeChar代表函数名称,char a表示函数接收一个字符a作为参数
char changeChar(char &a) {if (a >= 'a' && a <= 'z') a -= 32;// 返回类型为char, 最终还要返回areturn a;
}
七、 题目解答
7.1 原始代码
#include <iostream>
#include <string>
using namespace std;
int main(){int n;string s;cin >> n; //输入接收n行getchar(); //从输入中获取一个字符while(n--){getline(cin,s); //接收新的一行string result; //设定结果存储的字符串result//将首字母小写转换为大写if(s[0] >= 'a' && s[0] <= 'z'){s[0] -=32; //大小写之间相差32}//将首字母链接到结果中result += s[0];//遍历后续整个字符串for(int i = 1; i < s.size() - 1; i++){//i=1即是从第二个字母开始//若当前字符为空格,下一个字符不是空格,则说明下一个字符是新单词if(s[i] == ' ' && s[i+1] != ' '){//判定新单词是否为小写,若是,则转换if(s[i+1] >= 'a' && s[i+1] <= 'z'){s[i+1] -= 32;}//将新首字母链接到结果中result += s[i+1];}}cout << result << endl;}}
7.2 改进代码
#include <iostream>
#include <string>
using namespace std;//小写字母转换为大写字母的函数
char changeChar(char a){if(a >= 'a' && a <= 'z'){a -= 32;}return a;
}int main(){int n;string s,result;cin >> n; //输入接收n行getchar(); //从输入中获取一个字符while(n--){result = ""; //PS:该步骤不可缺少//或者均可//string result;getline(cin,s); //接收新的一行result += changeChar(s[0]); // 将s[0]传递到参数进行处理,转换成大写字母//遍历后续整个字符串for(int i = 1; i < s.size() - 1; i++){//i=1即是从第二个字母开始//若当前字符为空格,下一个字符不是空格,则说明下一个字符是新单词if(s[i] == ' ' && s[i+1] != ' '){result += changeChar(s[i+1]); //将s[i+1传递到参数进行处理,转换成大写字母}}cout << result << endl;}}

八、 拓展与延伸
8.1 形参和实参
实参和形参是与函数调用相关的两个很重要的概念,用于在函数调用时传递数据和接收数据。
形参是函数定义中声明的参数,位于函数的参数列表中。形参的作用是定义函数接受的参数的类型和名称,定义的形参只在函数执行期间有效,在函数执行完毕后会被销毁。而且它作用的范围(作用域)仅限于函数体内部,因此它们与函数外部的变量名称可以相同,而不会发生冲突。
void printSum(int a, int b) { // a和b是传递的形参,只在函数体{}中有效int sum = a + b;cout << sum << endl;
}
实参是函数调用中传递给函数的具体值或变量,实参传递的值必须与函数的形参类型匹配,否则会发生类型错误。
int main() {int x = 5, y = 3;printSum(x, y); // 这里进行了函数调用,x和y是实参cout << x << y << endl;return 0;
}
8.2 引用
在声明引用时,需要在变量名前使用 & 符号。引用必须在声明时进行初始化,并且一旦初始化,就不能改变引用的目标。
int a = 10;
int &ref = a; // 声明并初始化引用为a
当函数传递参数时,通常会创建参数的副本。使用引用参数可以避免不必要的参数复制,这对于大型数据结构(如数组)尤其有用,因为复制这些数据结构会产生显著的开销。
#include <iostream>
using namespace std;void changeValue(int & a) {a = 100; // 修改调用方传递的变量的值
}int main() {int x = 10;cout << x << endl;changeValue(x); // 传递x的引用给函数cout << x << endl; // x的值被函数修改为100return 0;
}
PS:引用的作用域(作用范围)通常是在声明它的函数或代码块内,超出作用域后引用将无效。
相关文章:
卡码网语言基础课 | 11. 句子缩写
目录 一、 字符串大小的比较 二、 ASCII码值 三、 基本框架代码 四、 解题思路 4.1 首字母问题 4.2 判定小写字母 4.3 小写字母转换为大写字母 五、空格判断 六、 代码模块化 6.1 满足的条件 6.2 代码完善 七、 题目解答 7.1 原始代码 7.2 改进代码 八、 拓展与…...
Surface RT 安装 Linux
零:起因 在家无事找出来一台老旧设备 Surface RT 一代的,系统最新是 Windows 8.1 arm版,应用商店都已经打不开了 虽说有破解方法,能运行些软件,但怎么说也不是任意安装,所以局限性还是相当的大࿰…...
C++中的函数重载:多功能而强大的特性
引言 函数重载是C编程语言中的一项强大特性,它允许在同一个作用域内定义多个同名函数,但这些函数在参数类型、个数或顺序上有所不同。本文将深入探讨函数重载的用法,以及它的优势和应用场景。 正文 在C中,函数重载是一项非常有…...
数据分析实战 | K-means算法——蛋白质消费特征分析
目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 编辑 八、模型评价 九、模型调参与预测 一、数据及分析对象 txt文件——“protein.txt”,主要记录了25个国家的9个属性,主…...
HTTP协议详解-下(Tomcat)
如何构造 HTTP 请求 对于 GET 请求 地址栏直接输入点击收藏夹html 里的 link script img a…form 标签 通过 form 标签构造GET请求 <body><!-- 表单标签, 允许用户和服务器之间交互数据 --><!-- 提交的数据报以键值对的结果来组织 --><form action&quo…...
acwing算法基础之搜索与图论--prim算法
目录 1 基础知识2 模板3 工程化 1 基础知识 朴素版prim算法的关键步骤: 初始化距离数组dist,将其内的所有元素都设为正无穷大。定义集合S,表示生成树。循环n次:找到不在集合S中且距离集合S最近的结点t,用它去更新剩余…...
Amazon EC2 Serial Console 现已在其他亚马逊云科技区域推出
即日起,交互式 EC2 Serial Console 现也在以下区域推出:中东(巴林)、亚太地区(雅加达)、非洲(开普敦)、中东(阿联酋)、亚太地区(香港)…...
hdlbits系列verilog解答(100输入逻辑门)-39
文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 构建一个具有 100 个输入in[99:0]的组合电路。 有 3 个输出: out_and: output of a 100-input AND gate. out_or: output of a 100-input OR gate. out_xor: output of a 100-input XOR gate. 二、verilog源…...
Python 中 Selenium 的屏幕截图
文章目录 使用 save_screenshot() 函数在 Python 中使用 selenium 捕获屏幕截图使用 get_screenshot_as_file() 函数在 Python 中使用 selenium 捕获屏幕截图使用 Screenshot-Selenium 包在 Python 中使用 selenium 捕获屏幕截图总结我们可以使用 Selenium 在自动化 Web 浏览器…...
scrapy发json的post请求
一 、scrapy发json的post请求: def start_requests(self):self.headers {Content-Type: application/json}json_data {"productName": "", "currentPage": "1", "recordNumber": "10", "langua…...
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
目录 1解题思路: 2代码如下: 3运行结果: 4总结: 5介绍: 1解题思路: 利用循环(穷举法)来 对 所 需要的数 进行确定 2代码如下: #include <stdio.h>int main() …...
自主开发刷题应用网站H5源码(无需后端无需数据库)
该应用使用JSON作为题库的存储方式,层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用,方便将题库从word格式转换为JSON格式。 四种刷题模式包括顺序刷题、乱序刷题、错题模式和背题模式,可以根据自己的需求选择适合的模…...
java 读取excel/word存入mysql
引入依赖 <!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artif…...
11.(vue3.x+vite)组件间通信方式之ref与$parent、$children
前端技术社区总目录(订阅之前请先查看该博客) 示例效果 注: (1)ref 加在标签(div等)上,是拿到dom 对象 (2)ref加上组件上,拿到的是组件的引用 (3)让父组件获取子组件的数据或者方法需要通过defineExpose对外暴露,另外让父组件获取子组件的数据或者方法需要通过d…...
[工业自动化-12]:西门子S7-15xxx编程 - PLC从站 - ET200 SP系列详解
目录 一、概述 1.1 概述 二、系统组成 2.1 概述 2.2 与主站的通信接口模块 2.3 总线适配器 2.4 基座单元 2.5 电子模块 2.6 服务器模块 一、概述 1.1 概述 PLC ET200 SP 是西门子(Siemens)公司生产的一款模块化可编程逻辑控制器(PL…...
消息队列简介
消息队列 在认识rabbitMQ之前,我们需要先认识下消息队列。 消息队列,一般简称为MQ(Message Queue)。先不管消息(Message)这个词,先看看队列(Queue)。 队列就是一种先进先出的数据结构。 所以消息队列可以简单理解为&a…...
SQL中实现汉字的拼音首字母查询
由于汉语拼音首字母也就23个,该方法利用汉字字符按拼音字母排序的特点来生成对应的拼单首字母,只需找到这23个汉语拼音首字母中分别排序在第一的汉字生成23条临时表数据用于参照,即可简单实现汉字匹配拼音首字母 CREATE FUNCTION f_GetPyAcr…...
今天知道LiveData的ktx是真的香
主要还是认知问题,Android 官网从一开始就在推ktx,现在都已经2. 版本了,但是呢,因为之前没有从0开始写过一个Kotlin的APP,就陷入了一个JAVA 思维,在JAVA 中我们知道要做到像协程这么处理不是不能࿰…...
SpringBoot中的桥接模式
桥接模式是一种结构型设计模式,它的主要目的是通过将抽象部分与实现部分分离,提高系统的灵活性和可扩展性。在桥接模式中,有四个主要参与者:抽象类、具体抽象类、桥接类和具体类。 抽象类是定义了抽象方法的基类,这些…...
AI爆文变现脚本:易用且免费的自动写作脚本更新了
之前给大家分享的AI爆文变现写作脚本 由于时间仓促,加上我对很多东西不熟悉 免费版本对新手小白来说,安装部署起来是非常的困难 于是这几天我加班加点把整个软件的部署简化 现在无需复杂的环境配置安装,下载配置下就可以使用了。 免费版…...
Windows 10下Veins+SUMO+OMNeT++环境搭建全攻略(避坑指南)
1. 环境准备:三大工具简介与版本选择 第一次接触车联网仿真时,我被VeinsSUMOOMNeT这个组合搞得晕头转向。后来才发现,这三个工具就像汽车工厂的三大部门:SUMO是道路规划师,负责构建交通场景;OMNeT是通信工…...
IEC 61850协议栈实战:libIEC61850开源库深度解析与电力自动化架构设计
IEC 61850协议栈实战:libIEC61850开源库深度解析与电力自动化架构设计 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 …...
autodl:conda虚拟环境中高效部署cuda与pytorch3d的完整指南
1. 为什么选择Autodl平台搭建深度学习环境 最近几年深度学习领域发展迅猛,各种新模型层出不穷。作为算法工程师,我经常需要在不同硬件环境下测试模型性能。传统本地开发最大的痛点就是硬件配置受限,特别是显卡性能不足时,训练一个…...
从Word2Vec到Attention:用‘讲故事’的方式,轻松理解NLP核心模型演进史
从Word2Vec到Attention:用故事串联NLP模型演进之路 想象一下,你正在教一个刚学会认字的孩子理解"国王-男人女人≈女王"这样的词语关系。这看似简单的语言游戏背后,隐藏着自然语言处理(NLP)技术数十年的智慧结晶。让我们穿越时空&am…...
别再只调PID了!用LQR控制倒立摆,Matlab里10行代码搞定状态反馈
别再只调PID了!用LQR控制倒立摆,Matlab里10行代码搞定状态反馈 当工程师第一次面对倒立摆系统时,往往本能地会想到PID控制器。毕竟,PID简单易懂,在工业界有着广泛的应用。但当你真正开始调试时,很快就会发现…...
【紧急预警】AIAgent“隐性失效”正在蔓延!SITS2026定义4类伪可靠陷阱及实时检测方案
第一章:SITS2026总结:构建可靠AIAgent的关键要素 2026奇点智能技术大会(https://ml-summit.org) 构建可靠AI Agent并非仅依赖更大参数量或更强算力,而需在系统性工程层面筑牢四大支柱:可验证的推理链、受控的工具调用、上下文感知…...
YOLO12多尺度检测效果展示:同一图像不同分辨率输入结果对比图集
YOLO12多尺度检测效果展示:同一图像不同分辨率输入结果对比图集 1. 引言:为什么分辨率对目标检测如此重要? 想象一下,你用手机拍了一张远处的风景照,照片里有个很小的人影。当你把照片放大看时,这个人影可…...
translategemma-27b-it实战教程:结合CSDN文档图示的Ollama图文翻译全流程解析
translategemma-27b-it实战教程:结合CSDN文档图示的Ollama图文翻译全流程解析 1. 教程概述与学习目标 今天我们来聊聊一个特别实用的AI工具——translategemma-27b-it。这是一个基于Ollama部署的图文对话翻译模型,能够同时处理文字和图片中的翻译需求。…...
java面试必问6:Spring IOC 是什么?从概念到原理,一篇讲透
Spring IOC 是什么?从概念到原理,一篇讲透面试官:“说一下 Spring IOC 是什么?” 你:“IOC 即控制反转,把对象创建和依赖管理的控制权从程序员手中交给 Spring 容器,不再需要手动 new。核心好处…...
MogFace-large多场景应用:直播美颜预处理、AI考勤系统集成案例
MogFace-large多场景应用:直播美颜预处理、AI考勤系统集成案例 1. 引言 你有没有遇到过这样的场景?在直播时,美颜滤镜总是识别不准你的脸,导致效果时好时坏;或者公司用的人脸考勤机,在光线稍暗或角度偏一…...
