当前位置: 首页 > 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;下载配置下就可以使用了。 免费版…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

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

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

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...