栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

「C++」C++ Primer Plus 笔记:第四章 复合类型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

「C++」C++ Primer Plus 笔记:第四章 复合类型

4.1 数组
  • 存储类型统一的多组数据值
  • 声明数组的通用格式
    typeName arrayName[arraySize];
    
  • 数组是复合类型,是因为数组是由其他类型来创建的,数组并不是一个数据类型,如果一点要说,它算是一个数据结构
  • 调用元素方式
    a[i];  // 使用[]号来调用数组元素
    int b[3] = {1, 2, 3}; // 使用大括号的方式进行初始化
    
4.1.1
  • 如果变量在初始化时没有声明,则该变量中存储的值是以前留驻在该内存中的值
4.1.2 数组的初始化规则
  • C++数组初始化规则:
    1. 只有在定义的时候才能对数组进行初始化,之后就不能了
    2. 初始化时提供给数组的值可以少于数组元素数目
    3. 如果只初始化一部分数组元素,则剩下未初始化的数组元素会默认初始化为0
    4. 不能将一个数组赋值给另一个数组
    5. 可以使用下标单独对数组元素进行赋值
    6. 声明数组时[]内可以不填,编译器会自动计算花括号内的元素个数
    7. sizeof 数组名是合法代码,返回数组的大小,以字节为单位(没有将数组名用sizeof括号括起来)
  • C++中大括号的初始化方式是一种通用的初始化方式,适用于所有类型的初始化
  • C++列表初始化新增功能:
    1. 初始化数组时,可以省略等号例如: double earns[3] {1, 2, 3};
    2. 大括号内可以不包含任何元素,这样会默认初始化为零
    3. 列表初始化禁止窄缩转换(高级数据类型降级为低级数据类型)
4.2 字符串
  • 以空字符()结尾
  • 数组字符串的初始化方法:
    char dog[8] = {'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'}; // 不是字符数组
    char dog[8] = {'b', 'b', 'b', 'b', 'b', 'b', 'b', ''}; //是字符数组,结尾处是表示停止录入的空字符
    char bird[11] = "Mr.cheeps"; //是字符串,这种写法被称为字符串常量,不需要显示写出空字符
    char sheep[] = "Mr.sheep"; //字符串的另一种声明和初始化
    
  • 通过键盘输入时,C++会自动在结尾加上空字符
  • 在给出字符数组的存储长度时,长度=字符数量+空字符(长度为1)
  • 字符串使用双引号,单个字符使用单引号
  • 单个字符的字符串"S"实际上表示的是字符串所在的内存地址
4.2.1 拼接字符串常量
  • C++允许两个并列的字符串自动拼接
    cout << "i must eat a " "burger"; // 合法代码
    
4.2.2 在数组中使用字符串
  • cstring库
4.2.3 字符串输入
  • cin使用空白(空格、制表符、换行符)来确定字符串的结束位置,所以没办法输入带空格的字符
4.2.4 每次读取一行字符串输入 4.2.4.1 面向行的输入:getline()
  • 该函数读取一整行,通过回车键入换行符来确定输入结尾,会将换行符一并读取到字符串中
  • 调用方法:
    cin.getline(); // 读取一行
    cin.getline(name, 20); //第一个是数组名称,第二个是读取字符+空字符的和,表示将读取的字符串存入字符数组中
    
4.2.4.2 面向行的输入:get()
  • 该函数读取一整行,和getline()一样的用法,但不会将换行符纳入字符串中,而是留在输入流中,举例如下:
    cin.get(); //读取一个字符
    
    cin.get(name, "hello");  // 读入字符串hello,将字符串末尾的换行符保留在输入流中
    cin.get(name, "world"); // 本来应该读取world,但由于上一行代码中的换行符仍在输入流,因此该行代码会发生错误
    // 正确做法
    cin.get(name, "hello");
    cin.get();   // 抵消换行符
    cin.get(name, "world");
    
  • 由于cin.get()和cin.getline()调用后会返回一个cin对象,因此可以进行拼接操作
cin.get(name, "hello").get()
cin.getline(name, "hello").getline(name, "world");

总之,getline使用起来简单,但个体检查错误更简单

4.2.4.3 空行和其他问题
  • 当get读取空行后,将设置失效位,意味着接下来的输入将被阻断,可以使用cin.clear()来恢复输入
  • 如果输入行包含的字符数比制定的多,则get和getline将余下的字符留在输入队列中;且getline会设置失效位,关闭后面的输入
4.2.5 混合输入字符串和数字
  • 混合输入数字和字符时,cin也会只读取数字(int,float等)部分,将换行符留在输入流中,导致下一行读入失败,正确解决应该是:
    int year;
    char adress[80];
    cin >> year;
    cin.get();  // 将year保留的换行符消除
    (cin.get()).get(); // 也可以在cin后拼接
    cin.getline(adress, "in my world");
    
4.3 string类简介
  • C++98新增了string类来处理字符串,而不是像之前那样只能用字符数组来存储字符串
  • 要使用string类需要在头文件中包含该库:#include,且string类位于std空间中
  • 可以使用数组表示法来访问存储在string对象中的字符
  • string类字符串相比数组字符串更方便,也更安全
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号