首页 > 编程语言 >C++学习笔记——006

C++学习笔记——006

时间:2024-03-29 09:00:57浏览次数:31  
标签:字符 int 笔记 006 使用 字符串 换行符 C++

  • 事实上,任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。因此,下面所有的输出语句都是等效的:
cout << "I'd give my right arm to be" " a great violinist.\n";
cout << "I'd give my right arm to be a great violinist.\n";
cout << "I'd give my right ar"
"m to be a great violinist.\n";

 

注意,拼接时不会在被连接的字符串之间添加空格,第二个字符串的第一个字符将紧跟在第一个字符串的最后一个字符(不考虑\0)后面。第一个字符串中的\0字符将被第二个字符串的第一个字符取代。

 

  • strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。另外,strlen()只计算可见的字符,而不把空字符计算在内。

 

  • istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。

 

  • 为什么要使用get(),而不是getline()呢?首先,老式实现没有getline()。其次,get()使输入更仔细。例如,假设用get()将一行读入数组中。如何知道停止读取的原因是由于已经读取了整行,而不是由于数组已填满呢?查看下一个输入字符,如果是换行符,说明已读取了整行;否则,说明该行中还有其他输入。总之,getline()使用起来简单一些,但get()使得检查错误更简单些。可以用其中的任何一个来读取一行输入:只是应该知道,它们的行为稍有不同。

 

  • C++11新增的另一种类型是原始(raw)字符串。在原始字符串中,字符表示的就是自己,例如,序列\n不表示换行符,而表示两个常规字符——斜杠和n,因此在屏幕上显示时,将显示这两个字符。另一个例子是,可在字符串中使用",而无需像其他程序中那样使用繁琐的\"。当然,既然可在字符串字面量包含",就不能再使用它来表示字符串的开头和末尾。因此,原始字符串将"(和)"用作定界符,并使用前缀R来标识原始字符串:
cout << R"(Jim "King" Tutt uses "\n" instead of endl.)" << '\n';

上述代码将显示如下内容:

Jim "King" Tutt uses "\n" instead of endl.

 

  • 输入原始字符串时,按回车键不仅会移到下一行,还将在原始字符串中添加回车字符。

 

  • 如果要在原始字符串中包含)",该如何办呢?编译器见到第一个)"时,会不会认为字符串到此结束?会的。但原始字符串语法允许您在表示字符串开头的"和(之间添加其他字符,这意味着表示字符串结尾的"和)之间也必须包含这些字符。因此,使用R"+*(标识原始字符串的开头时,必须用)+*"标识原始字符串的结尾。因此,下面的语句:
cout << R"+*("(Who wouldn't?)", she whispered.)+*" << endl;

将显示如下内容:

"(Who wouldn't?)", she whispered.

 

总之,这使用"+*(和)+*"替代了默认定界符"(和)"。自定义定界符时,在默认定界符之间添加任意数量的基本字符,但空格、左括号、右括号、斜杠和控制字符(如制表符和换行符)除外。

 

  • 可将前缀R与其他字符串前缀结合使用,以标识wchar_t等类型的原始字符串。可将R放在前面,也可将其放在后面,如Ru、UR等。

 

  • 如果结构初始化的大括号内未包含任何东西,则各个成员都将被设置为0,数值类型的变量均被设置为0,字符类型的变量每个字节都被设置为0。

 

  • 共用体的长度为其最大成员的长度。共用体的用途之一是,当数据项使用两种或更多种格式(但不会同时使用)时,可节省空间。例如,假设管理一个小商品目录,其中有一些商品的ID为整数,而另一些的ID为字符串。在这种情况下就可以使用共用体。共用体常用于(但并非只能用于)节省内存。当前,系统的内存多达数GB甚至数TB,好像没有必要节省内存,但并非所有的C++程序都是为这样的系统编写的。C++还用于嵌入式系统编程,如控制烤箱、MP3播放器或火星漫步者的处理器。对这些应用程序来说,内存可能非常宝贵。另外,共用体常用于操作系统数据结构或硬件数据结构。

 

  • 枚举量是整型,可被提升为int类型,但int类型不能自动转换为枚举类型。

 

  • 在C++早期的版本中,只能将int值(或提升为int的值)赋给枚举量,但这种限制取消了,因此可以使用long甚至long long类型的值。

 

  • 顺便说一句,*运算符两边的空格是可选的。传统上,C程序员使用这种格式: int *ptr; 。这强调*ptr是一个int类型的值。而很多C++程序员使用这种格式: int* ptr; 。这强调的是:int*是一种类型——指向int的指针。在哪里添加空格对于编译器来说没有任何区别,您甚至可以这样做: int*ptr; 。但要知道的是,下面的声明创建一个指针(p1)和一个int变量(p2): int* p1, p2; 。对每个指针变量名,都需要使用一个*。

 

  • 在C++中,int*是一种复合类型,是指向int的指针。

 

  • 警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于使用指针的金科玉律。

扫码关注公众号,查看更多精彩内容

标签:字符,int,笔记,006,使用,字符串,换行符,C++
From: https://www.cnblogs.com/bobbycheng/p/18103006

相关文章

  • stm32f103c8t6学习笔记(学习B站up江科大自化协)-DMA
    DMA简介    ·DMA主要用于协助CPU完成数据转运的工作    ·DMA,英文全称DirectMemoryAccess,DMA这个外设是可以直接访问STM32内部存储器的,包括运行内存SRAM,程序存储器flash和寄存器等等,DMA都有权限访问,所以DMA能完成数据转运的工作    ·第二行的外......
  • 面试题知识点笔记-MySQL开发
    目录可以使用MySQL直接存储文件(ppt,exel,图像等)吗?什么时候存,什么时候不存?Emoji乱码怎么办?存储的时候有遇到过什么问题吗?如何存储ip地址?长文本如何存储?大段文本如何设计表结构?大段文本查找时如何建立索引?有没有在开发中使用过TEXT,BLOB数据类型日期,时间如何存......
  • 面试题知识点笔记-MySQL日志
    目录MysqI会产生几种日志?binlog作用是什么?redolog作用是什么?undolog作用是什么?Mysql日志是否实时写入磁盘?binlog刷盘机制是如何实现的?redolog刷盘机制是如何实现的?undolog刷盘机制是如何实现的?MySQL的binlog有有几种录入格式?分别有什么区别?Mysq!集群同......
  • lanqiao106. 正则问题 (第八届蓝桥杯C++A组)或者 acwing 1225. 正则问题
    问题:知识补充:1. 正则表达式的计算①括号代表优先计算,②或符号代表二选一。比如给的例子:((xx|xxx)x|(x|xx))xx 2. 字符串的语法问题:string是字符串的类型,使用的时候也使像字符一样使用,加入定义stringstr,那么使用的时候要写成str[]思考:妈呀一开始我不会算正则表达......
  • C++取经之路(其二)——含数重载,引用。
    含数重载:函数重载是指:在c++中,在同一作用域,函数名相同,形参列表不相同(参数个数,或类型,或顺序)不同,C语言不支持。举几个例子:1.参数类型不同intAdd(intleft,intright){ cout<<"intAdd(intleft,intright)"<<endl; returnleft+right;}doubleAdd(doublele......
  • 论文笔记 SimpleNet A Simple Network for Image Anomaly Detection and Localization
    背景对于工业场景上的异常检测和定位任务,由于零件的异常情况具有多样性和随机性,所以很难用有监督的方式来解决;目前用的最多的是用无监督的方式,在训练过程中只使用正常样本进行训练,目前无监督解决异常检测任务的三个趋势是基于重建的方法,基于合成的方法以及基于嵌入的......
  • 树哈希学习笔记
    1.作用判断一些树是否同构。2.方法2.1.具体操作这类方法需要一个多重集的哈希函数。以某个结点为根的子树的哈希值,就是以它的所有儿子为根的子树的哈希值构成的多重集的哈希值,即:\[h_u=f(\{h_v|v\inson(u)\})\]其中\(h_x\)表示以\(x\)为根的子树的哈希值,\(f\)是多重集的......
  • 3.28 第一次结对笔记
     今天准备设计一下地铁查询系统的整体架构,因为北京地铁的线路繁多,所以在设计数据库表时就存在很大问题,如何设计才能在存储数据时以及前后端处理数据时,都简便一些。当然如果一方面过度的方便就证明另一方面极其困难,在博客园找到了15年地铁站点的数据,但是对比现在差的太多了,所以我......
  • 新手c语言笔记
    第1章认识C语言C语言是国际流行的使用最广泛的感激程序设计语言。它既可以用来写系统软件,也可以用来写应用软件。1.1C语言的特点(1)c语言简洁紧凑,编写的程序短小精悍。(2)运算符丰富,数据结构丰富。c语言程序生成代码的质量较高,程序执行效率高。(3)C语言限制不太严格,程序设计自......
  • Mybatis学习笔记
    1、概述1.1MyBatisMyBatis是持久层框架,用于简化JDBC的开发。官网:https://mybatis.org/mybatis-3/zh/index.html使用Mybatis操作数据库,就是在Mybatis中编写SQL查询代码,发送给数据库执行,数据库执行后返回结果。1.2预编译SQL性能更高更安全,能防止sql注入SQL注入是通过操......