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.mzph.cn/news/599513.shtml

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

相关文章

【React系列】Hook(一)基本使用

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识hook 1.1. 为什么需要hook Hook 是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下…

群晖Docker部署HomeAssistant容器结合内网穿透远程控制家中智能设备

目录 一、下载HomeAssistant镜像 二、内网穿透HomeAssistant&#xff0c;实现异地控制智能家居 三、使用固定域名访问HomeAssistant 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站 Ho…

Guava Cache 异步刷新技巧,你值得拥有!

以下文章来源于勇哥Java实战 &#xff0c;作者勇哥 Guava Cache是一款非常优秀的本地缓存框架。 这篇文章&#xff0c;我们聊聊如何使用 Guava Cache 异步刷新技巧带飞系统性能 。 1 经典配置 Guava Cache 的数据结构跟 JDK1.7 的 ConcurrentHashMap 类似&#xff0c;提供了基…

citeSpace保姆级安装使用教程

citeSpace保姆级安装使用教程 文章目录 citeSpace保姆级安装使用教程CiteSpace功能与参数区安装使用知网数据导出citespace数据导入结果 设置操作隐藏节点 CiteSpace功能与参数区 安装 citeSpace安装教程 citespace下载 网址&#xff1a;https://citespace.podia.com/ 安装之…

STM32使用中断方式进行USART数据收发以及printf函数的重写

时间记录&#xff1a;2024/1/5 一、USART/UART介绍 协议介绍 &#xff08;1&#xff09;起始位&#xff0c;一位逻辑电平0表示 &#xff08;2&#xff09;数据位&#xff0c;8-9位&#xff0c;逻辑高低电平&#xff0c;一般使用8位 &#xff08;3&#xff09;校验位&#xff…

2-sql注入之sqli-labs靶场搭建

文章目录 SQL注入之sqli-labs靶场搭建1、Sqli-labs环境安装需要安装以下环境工具下载链接&#xff1a; 2、phpstudy连接mysql总是启动了又停止第一种情况可能是端口占用问题第二种情况就是曾经在电脑上安装过mysql SQL注入之sqli-labs靶场搭建 Sqli-labs是一个印度程序员写的&…

vmware中ubuntu虚拟机不能够用共享文件夹

有时候发现装好虚拟机后&#xff0c;然后 虚拟机-设置-选项-共享文件夹 然后使用快捷键ctrlaltt 打开命令行&#xff0c;cd /mnt下没有看到hgfs文件夹 解决办法是安装vmware tools工具 此时想通过点击 虚拟机-安装vmwaretools工具 按钮 居然发现该按钮是灰色的&#xff0…

CMake入门教程【核心篇】动态库(dll, so)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 CMake入门教程【核心篇】动态库(dll, so)1.简介2.动态库的优势3.动态库的劣势4.创建动态库5.完整代码示例6.实战使用技巧与注意事项

实现文件拖拽上传的功能

1 先来看一下效果 2 我们来看一下代码执行的结果&#xff1a; 我们创建目标的容器盒子 和可以展示数据的ul 监听进入目前盒子的事件 3 文件进入目标容器中解析文件

Python中 的函数介绍

函数 在Python中,函数是用来执行某种功能的 函数定义 def function_name(参数列表):代码块[return val]比如 #---------------定义------------- def add_3(num):newnum num3return newnumnum 3 print(add_3(num))函数调用 def add_3(num):newnum num3return newnumnum …

科研上新 | 第6期:优化LLM数学推理;深度学习建模基因表达调控;基于深度学习的近实时海洋碳汇估算

编者按&#xff1a;欢迎阅读“科研上新”栏目&#xff01;“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 …

在 IDEA 中创建JavaWeb 项目的方式(超详细步骤教程和遇到的问题)

目录 0-1项目图片操作步骤链接0-2项目结构预览1.新建Project2.定义项目名称3.创建完成后项目结构4.创建config文件夹4.1 作用 5.在WEB-INF下创建lib文件夹5.1然后搞几个常用的jar包放入5.1.1jar包全选中后右键选择放入类库5.1.2jar包全选中后右键选择放入类库 6.创建src下文件夹…

软件测试金融项目经验总结,面试题都问什么?

1、APP端/客户端接口加解密介绍 加密方式&#xff08;两种&#xff09;&#xff1a; 在TCP/IP四层模型中的应用层进行加密。类似密码本&#xff0c;当前项目使用的是这种&#xff0c;可以看到所有响应内容&#xff0c;只是看不懂。 在TCP/IP四层模型中的运输层和应用层之间进行…

「Vue3面试系列」Vue3 所采用的 Composition Api 与 Vue2 使用的 Options Api 有什么不同?

文章目录 开始之前正文一、Options Api二、Composition Api三、对比逻辑组织Options APICompostion API 逻辑复用 小结 开始之前 Composition API 可以说是Vue3的最大特点&#xff0c;那么为什么要推出Composition Api&#xff0c;解决了什么问题&#xff1f; 通常使用Vue2开…

网工内推 | 保险业网工,有绩效奖金,CISP认证优先,最高16K

01 华贵人寿保险股份有限公司 招聘岗位&#xff1a;系统管理岗&#xff08;主机管理方向&#xff09; 职责描述&#xff1a; 1.负责数据中心私有云平台的规划建设以及后期的运行维护&#xff1b; 2.负责公司操作系统的规划、部署与日常维护&#xff1b; 3.负责操作系统运维相关…

rime中州韵小狼毫 help lua Translator 帮助消息翻译器

lua 是 Rime中州韵/小狼毫输入法强大的武器&#xff0c;掌握如何在Rime中州韵/小狼毫中使用lua&#xff0c;你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 &#x1f447; help效果 一节中&#xff0c; 我们看到了在Rime中州韵/小狼毫输入法中输入 h…

算法第十一天-组合总和Ⅳ

组合总和Ⅳ 题目要求 解题思路 来自[负雪明烛] 题目有个明显的提示&#xff1a;求组合的个数&#xff0c;而不是每个组合。如果是要求出每个组合&#xff0c;那么必须使用回溯法&#xff0c;保存所有路径。但是如果是组合个数&#xff0c;一般都应该想到[动态规划]的解法。 直…

记录 搭载小车 运行激光slam lio-sam fast-lio2

用了将近一个月搭载了一台履带车 其中 主控&#xff1a;NUC i7-8559U 激光雷达为&#xff1a;velodyne16线和hesai64线 IMU为&#xff1a;轮趣N100 mini 对imu使用上位机进行调平矫正 设置输出400HZ 对外参标定 首先使用velodyne16线 安装驱动直接运行&#xff0c;没遇到啥…

人工智能_机器学习092_使用三维瑞士卷数据_利用分层聚类算法进行瑞士卷数据三维聚类---人工智能工作笔记0132

然后我们使用分层聚类算法来对我们导入的瑞士卷数据进行聚类 agg =AgglomerativeClustering(n_clusters = 6,linkage = ward) 可以看到这里我们使用的,聚类距离计算用的是,ward这种,最小化簇内方差的形式,l进行聚类对吧 可以看到这个linkage参数有好几个选择对吧,是之前我们讲过…

网络通信理论-入门1

网口框架 100M 2. 物理层解读 2.1 同步的方法&#xff1a;编码 为了让接收方在没有外部时钟参考的情况也能确定每一位的起始、结束和中间位置&#xff0c;在传输信号时不直接采用二进制编码。在 10BASE-T 的传输方式中采用曼彻斯特编码&#xff0c;在 100BASE-T 中则采用 4B/…