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

卡码网语言基础课 | 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

零&#xff1a;起因 在家无事找出来一台老旧设备 Surface RT 一代的&#xff0c;系统最新是 Windows 8.1 arm版&#xff0c;应用商店都已经打不开了 虽说有破解方法&#xff0c;能运行些软件&#xff0c;但怎么说也不是任意安装&#xff0c;所以局限性还是相当的大&#xff0…...

C++中的函数重载:多功能而强大的特性

引言 函数重载是C编程语言中的一项强大特性&#xff0c;它允许在同一个作用域内定义多个同名函数&#xff0c;但这些函数在参数类型、个数或顺序上有所不同。本文将深入探讨函数重载的用法&#xff0c;以及它的优势和应用场景。 正文 在C中&#xff0c;函数重载是一项非常有…...

数据分析实战 | K-means算法——蛋白质消费特征分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 ​编辑 八、模型评价 九、模型调参与预测 一、数据及分析对象 txt文件——“protein.txt”&#xff0c;主要记录了25个国家的9个属性&#xff0c;主…...

HTTP协议详解-下(Tomcat)

如何构造 HTTP 请求 对于 GET 请求 地址栏直接输入点击收藏夹html 里的 link script img a…form 标签 通过 form 标签构造GET请求 <body><!-- 表单标签, 允许用户和服务器之间交互数据 --><!-- 提交的数据报以键值对的结果来组织 --><form action&quo…...

acwing算法基础之搜索与图论--prim算法

目录 1 基础知识2 模板3 工程化 1 基础知识 朴素版prim算法的关键步骤&#xff1a; 初始化距离数组dist&#xff0c;将其内的所有元素都设为正无穷大。定义集合S&#xff0c;表示生成树。循环n次&#xff1a;找到不在集合S中且距离集合S最近的结点t&#xff0c;用它去更新剩余…...

Amazon EC2 Serial Console 现已在其他亚马逊云科技区域推出

即日起&#xff0c;交互式 EC2 Serial Console 现也在以下区域推出&#xff1a;中东&#xff08;巴林&#xff09;、亚太地区&#xff08;雅加达&#xff09;、非洲&#xff08;开普敦&#xff09;、中东&#xff08;阿联酋&#xff09;、亚太地区&#xff08;香港&#xff09;…...

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请求&#xff1a; def start_requests(self):self.headers {Content-Type: application/json}json_data {"productName": "", "currentPage": "1", "recordNumber": "10", "langua…...

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

目录 1解题思路&#xff1a; 2代码如下&#xff1a; 3运行结果&#xff1a; 4总结&#xff1a; 5介绍&#xff1a; 1解题思路&#xff1a; 利用循环&#xff08;穷举法&#xff09;来 对 所 需要的数 进行确定 2代码如下&#xff1a; #include <stdio.h>int main() …...

自主开发刷题应用网站H5源码(无需后端无需数据库)

该应用使用JSON作为题库的存储方式&#xff0c;层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用&#xff0c;方便将题库从word格式转换为JSON格式。 四种刷题模式包括顺序刷题、乱序刷题、错题模式和背题模式&#xff0c;可以根据自己的需求选择适合的模…...

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 是西门子&#xff08;Siemens&#xff09;公司生产的一款模块化可编程逻辑控制器&#xff08;PL…...

消息队列简介

消息队列 在认识rabbitMQ之前&#xff0c;我们需要先认识下消息队列。 消息队列&#xff0c;一般简称为MQ&#xff08;Message Queue&#xff09;。先不管消息(Message)这个词&#xff0c;先看看队列(Queue)。 队列就是一种先进先出的数据结构。 所以消息队列可以简单理解为&a…...

SQL中实现汉字的拼音首字母查询

由于汉语拼音首字母也就23个&#xff0c;该方法利用汉字字符按拼音字母排序的特点来生成对应的拼单首字母&#xff0c;只需找到这23个汉语拼音首字母中分别排序在第一的汉字生成23条临时表数据用于参照&#xff0c;即可简单实现汉字匹配拼音首字母 CREATE FUNCTION f_GetPyAcr…...

今天知道LiveData的ktx是真的香

主要还是认知问题&#xff0c;Android 官网从一开始就在推ktx&#xff0c;现在都已经2. 版本了&#xff0c;但是呢&#xff0c;因为之前没有从0开始写过一个Kotlin的APP&#xff0c;就陷入了一个JAVA 思维&#xff0c;在JAVA 中我们知道要做到像协程这么处理不是不能&#xff0…...

SpringBoot中的桥接模式

桥接模式是一种结构型设计模式&#xff0c;它的主要目的是通过将抽象部分与实现部分分离&#xff0c;提高系统的灵活性和可扩展性。在桥接模式中&#xff0c;有四个主要参与者&#xff1a;抽象类、具体抽象类、桥接类和具体类。 抽象类是定义了抽象方法的基类&#xff0c;这些…...

AI爆文变现脚本:易用且免费的自动写作脚本更新了

之前给大家分享的AI爆文变现写作脚本 由于时间仓促&#xff0c;加上我对很多东西不熟悉 免费版本对新手小白来说&#xff0c;安装部署起来是非常的困难 于是这几天我加班加点把整个软件的部署简化 现在无需复杂的环境配置安装&#xff0c;下载配置下就可以使用了。 免费版…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...