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,一经查实,立即删除!

相关文章

PHP写一个函数能够遍历一个文件夹下的所有文件和子文件夹

社区版本可以用 function myscandir($dir) { $files array(); if ( $handle opendir($dir) ) { while ( ($file readdir($handle)) ! false ) { if ( $file ! ".." && $file ! "." ) { if ( isdir($dir . "/" . $file) ) { $…

[ABC334E] Christmas Color Grid 1

洛谷题目链接 Atcoder题目链接 分析 发现将每个红色连通块涂成绿色连通块后&#xff0c;绿色连通块个数会加一&#xff0c;但是如果这个连通块之前已经跟绿色连通块相邻&#xff0c;则连通块数量减一。 代码 #include <bits/stdc.h> #define int long longusing nam…

11. 线程

11. 线程 1. 线程概述1.1 线程概念1.1.1 什么是线程1.1.2 线程是如何创建起来的1.1.3 线程的特点1.1.4 线程与进程 1.2 并发和并行 2. 线程 ID3. 创建线程4. 终止线程5. 回收线程6. 取消线程6.1 取消一个线程6.2 取消状态以及类型6.3 取消点6.4 线程可取消性的检测 7. 分离线程…

【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的情况下…

OpenFeign相关问题及答案(2024)

1、什么是OpenFeign&#xff0c;它如何简化远程服务调用&#xff1f; OpenFeign是一个声明式的Web服务客户端&#xff0c;它使得编写HTTP客户端变得更加容易。它属于Spring Cloud Netflix项目的一部分&#xff0c;可以与Spring Boot应用轻松集成。通过使用OpenFeign&#xff0…

群晖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/ 安装之…

大A又跌了

才开盘几天&#xff0c;又开始下跌了。生活更加苦难。期待高深算法。

18、Kubernetes核心技术 - InitContainer(初始化容器)

目录 一、概述 二、使用InitContainer 一、概述 InitContainer即初始化容器&#xff0c;是 K8S官方为我们提供的一个可以用来判断环境是否已经满足运行 Pod 应用前所需要的条件。 比如我们有一个应用&#xff0c;需要部署到Tomcat环境&#xff0c;那么在部署这个应用Pod之前…

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…

DevOps(5)

目录 21.如何在Linux下访问分区&#xff1f; 22.什么是硬链接&#xff1f; 23.Linux下文件名的最大长度是多少&#xff1f; 24.什么是以点开头的文件名&#xff1f; 25.解释虚拟桌面&#xff1f; 21.如何在Linux下访问分区&#xff1f; Linux在驱动器标识符的末尾分配数字…

如何获取时间戳?

获取现在的时间0时0秒 一、JavasCRIPT时间转时间戳 JavaScript获得时间戳的方法有五种&#xff0c;后四种都是通过实例化时间对象new Date() 来进一步获取当前的时间戳&#xff0c;JavaScript处理时间主要使用时间对象Date Date.now()可以获得当前的时间戳&#xff1a; con…

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;同时也能找到先进实用的开源工具。 本期内容速览 …

Namp扫描工具的使用

写在前面&#xff1a; Nmap是一款应用广泛的网络探测工具&#xff0c;它可以识别网络中计算机及操作系统、检测端口、识别协议指纹、检测文件传输以及执行安全扫描等功能&#xff0c;从而防止攻击行为的发生。 一、介绍 Nmap&#xff08;Network Mapper&#xff09;是一个网…