C++初级(三)

我们这里还是在C基础上进行对C++基础语法的补充学习!

一.C++数组

C++数组大体和C相同,但是C++数组还是有一定的区别的。

我们先看看C和C++数组共同的易错点知识:

1.数组只能一次初始化。

2.如果对数组只进行一部分初始化,那么其他未初始化的为0.

好了,下面我们就来学习C++与C不同的部分了:

与C不一样,C++初始化数组方式有了以下新的变化,当然C的方式肯定还可以用:

1、C++可以在初始化数组时,省略=,而C语言却不行。

int main()
{int arr[4]{ 1,2,3,4 };return 0;
}

但是如果是在C,会报以下错误:

2、C++可以在{}内部不加任何内容,此时表示将数组全部置空,而在C就会报错!

C语言误认为}是内容,从而报无}的错误。

3、这条是C++ Primer Plus 上的内容,说C++不能进行缩窄转换,但是我用VS2022,发现这个现在编译器可以进行了,能够进行转换,大家可以利用自己的编译器,看看是否可以做到。

二.字符串

C++存在两种字符串写法,一种是C语言的改版,另一种则是C++自身带有的写法。

下面我们对两种分别进行介绍:

2.1.C改版

我们知道在C语言中,字符串是能够拼接的,原因就在于引入了C++的字符串常量拼接规则。

注意:如果要用C的字符串相关函数,要加头文件,C:<string.h>改成<cstring>

我们知道在C++中,cin是以空白(空格,制表符和换行符)来确定字符串的结束位置,所以我们会发现,cin一次自能读取一个单词,那么如果我要的是地名,可能就会出现不完全的情况,所以我们引入下面两种新读取。

cin--面向单词的

getline/get--面向行的

我们先讲getline():

getline()读取整行,通过回车建确定结尾,有两个参数,第一个是储存行的数组的名称,第二个是读取的字符数,这要要注意,最后一个要留下给‘\0’,如果读取的是20个字符数,那么有效的只有19个,使用方法:

cin.getline(arr,20);

注意:要包含头文件<cstring>

下面我们来讲另一种:

get():

get()大体和getline相同,只有一点要注意:如果第二个参数输入20,get不会读取换行符,即20全为有效字符串,而换行符留在了队列中,如果下次读取内容,就会先读取换行符,所以如果我们使用get,一定要加一行get读取换行符,如下:

cin.get(arr,20);
cin.get();//注意:get可以不加参数

但是一直这样写,万一那次忘记了,是不是就可能出现大问题,C++给我们提供了以下写法,可以将两个类函数拼接:

cin.get(arr,20).get();

如果我们这样写是不是就不会忘记写了,这就是C++的好处,后续学习,相信你会喜欢上C++的。

既然上面两个都可以一行读取,那么我们该如何选择用哪一个呢?

下面我简单带领大家看看两种的优劣:

如果我们想知道编译器读取一行字符串是不是因为遇到换行符停下来的,这个时候,是不是就可以用get来检查了。

所以如果我们getline(),代码书写可能会简单一些,但是如果我们使用get()可以对错误进行有效检查。

上面这些都是C语言在C++的改变之处,但是C++本生自带有字符串基本类型,而且更好。

2.2.C++版

C++提供了string类,该类隐藏了字符串的数组性质,使我们能够像处理普通变量一样处理字符串。

string类使用方式如下:

1、可以使用C风格来初始化string对象

2、可以用cin来将键盘的输入存储到该数组

3、可以使用cout来显示string对象

4、可以使用数组方式访问string对象

如下:

string对象声明时开辟的空间为0,可以根据需要来调整大小,感觉是不是有点厉害。

但是远不止于此

我们在C语言中如果想要一个字符串复制给另一个字符串数组,将一个字符串数组拼接到另一个字符串数组后面,是不是需要一些函数,如:strlen()--求字符串长度,strcpy--字符串复制,strcat--拼接,但是在string,这一切都不是问题。

1.string可以直接赋值

str1=str2;//将str2的值赋值给str1

2、string可以直接拼接

str1+=str2;//将str2拼接到str1后面

3、string可以附加

str3=str1+str2;//将str1和str2的值附加给str3

求字符串长度:

在C语言中我们是用strlen来求,这个当然可以在C++使用,但是C++本身也有自己所带的函数

int len=str.size()在‘.'前边是所要求的字符串的名,返回的是int类型值。

2.3.补充

我们之前学过wchar,char16_t,char32_t这三种特殊类型,现在我们来看看此三的字符串如何表示:

其实他们大体还是和之前一样,只需要用数组表示即可

wchar_t name[]=L"hello world";
char16_t name2[]=u"hello world";
char32_t name3[]=U"hello world";

C++除了这些,还新增了原始字符串:

原始字符串用“()”作为界定符,并且用前缀R来表示原始字符串,如下:

cout<<R"(hello world)";

原始字符串的作用:

如果我们之前表示类似:\,"等是不是要加\,防止被识别为转义字符,现在在原始字符串中,可以直接写成“\等,不会被转意了。

但是有出现了下面这个问题:

如果我在字符串中需要)”同时出现时,但是我还没结束,会被认为是结束吗?

答案是:当然会,所以我们又引入了新的写法来改进该问题。

R“+*()+*”;该写法就可以避免了,看代码:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{cout << R"+*("(Who are you?)",she whispered.)+*" << endl;return 0;
}

结果:

以上就是本次内容,希望对你有所帮助。

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

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

相关文章

202402读书笔记|《当你老了》——灰蒙曙光比爱情温柔,清晨露珠比希望更可爱

202402读书笔记|《当你老了》——灰蒙曙光比爱情温柔&#xff0c;清晨露珠比希望更可爱 《当你老了》作者叶芝&#xff0c;断断续续碎片时间读完的一本书&#xff0c;不是很惊艳&#xff0c;但值得一读。就因为很喜欢当你老了&#xff0c;所以拾起的这本书。读完知道了原来叶芝…

javafx

JavaFX JavaFX简介 JavaFX是一个用于创建富客户端应用程序的图形用户界面&#xff08;GUI&#xff09;框架。它是Java平台的一部分&#xff0c;从Java 8开始成为Java的标准库。 JavaFX提供了丰富的图形和多媒体功能&#xff0c;使开发人员能够创建具有吸引力和交互性的应用程…

NLP电影情绪分析项目

https://machinelearningmastery.com/develop-word-embedding-model-predicting-movie-review-sentiment/ https://machinelearningmastery.com/prepare-movie-review-data-sentiment-analysis/ 本教程分为 5 个部分;他们是&#xff1a; 电影评论数据集数据准备训练嵌入层训练…

火力发电厂电高压系统电弧光保护监测设备

摘要&#xff1a;介绍了电弧光保护装置的组成,对火力发电厂高压厂用电系统保护的现状及存在的不足进行了分析,以一个典型的2300MW火力发电厂工程为例,讨论了高压厂用电系统电弧光保护装置的设计应用方案,对电弧光保护装置的应用前景进行了展望。1联5系8电2话171微3信5同2号2 关…

PCIe 6.0生态业内进展分析总结-2

3.PCIe 6.0协议分析仪 (1)Keysight Keysight是德科技在2023年6月份对外宣布&#xff0c;第一款支持PCIe 6.0协议验证调试工具。 Keysight PCIe 6.0架构解决方案具备以下特点&#xff1a; 分析PCIe 6.0技术设计的数据链路/事务层 支持所有PCIe技术速率——从2.5 GT/s至64 GT/…

每日一道算法题day-three(备战蓝桥杯)

哈喽大家好&#xff0c;今天来给大家带来每日一道算法题系列第三天&#xff0c;让我们来看看今天的题目&#xff0c;一起备战蓝桥杯 题目&#xff1a; 小 Y的桌子上放着 n 个苹果从左到右排成一列&#xff0c;编号为从 11 到 n。 小苞是小 Y 的好朋友&#xff0c;每天她都会…

Idea live template

1:打印入参日志的配置 log.info("$methodName$ 方法入参: $argsLog$",$argsJson$); methodName:methodName() argsLog:groovyScript( "def result; def params\"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList(); for(i 0; i <…

StreamPark + PiflowX 打造新一代大数据计算处理平台

&#x1f680; 什么是PiflowX PiFlow 是一个基于分布式计算框架 Spark 开发的大数据流水线系统。该系统将数据的采集、清洗、计算、存储等各个环节封装成组件&#xff0c;以所见即所得方式进行流水线配置。简单易用&#xff0c;功能强大。它具有如下特性&#xff1a; 简单易用…

x-cmd pkg | procs - ps 命令的现代化替代品

目录 简介首次用户功能特点类似工具进一步阅读 简介 procs 是用 Rust 编写的 ps 替代品&#xff0c;用于显示有关任务进程的信息 首次用户 使用 x procs 即可自动下载并使用 在终端运行 eval "$(curl https://get.x-cmd.com)" 即可完成 x 命令安装, 详情参考 x-cmd…

地球系统模式(CESM)实践技术应用

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

Win11系统的优化方法参考文档(彻底优化策略)

目录 一、个性化-应用-关闭防火墙等的设置 二、任务栏优化设置 三、Win11开始菜单更改为Win10经典菜单 四、将Micresoft Store 从固定任务栏取消 五、电源性能优化 六、解决卡顿 七、卸载系统自带软件 八、任务管理器开机启动项的禁用 九、调整为最佳性能 十…

LeetCode-无重复字符的最长子串(3)

题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 代码&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> occnew HashSet<Character>();int lens.length();int…