第4章 复合类型

第4章 复合类型

4.1
数组

4.1.1 数组、结构和指针的区别

  1. 数组:可以存储多个同类型 的值,每个值都 独立
    的存储在一个数组元素中计算机在内存中依次存储数组的各个元素;

  2. 结构:可以存储多个 不同类型 的值;

  3. 指针:将数据的 位置/地址 告诉计算机。

4.1.2 数组声明格式

typename
arrayname[array size];

note:array size:其值必须为已知,且为常量

数组可以单独访问元素,方法是使用下标或索引来对元素进行编号,从0开始编号。

4.1.3 sizeof在数组中的运用

sizeof
返回类型或数据对象的长度(单位为字节),若sizeof用于数组名,则返回整个数组的长度,若sizeof用于数组元素,则返回元素的长度。

4.1.4 数组初始化

  1. 只有在定义数组时才能进行初始化,之后就不能了;也不能将一个数组赋值给另一个数组。

int arr[4] = {0,1,2,3}; //ok

int arr[4];

arr[4] = {0,1,2,3}; //no
ok

int arr1[4] = {0,1,2,3};

int arr2[4];

arr2 = arr1; //no ok

  1. 若只对数组部分元素进行初始化,则其他元素默认为0,故若整个数组元素赋值为0,则

int arr[100] = {0}; //ok

  1. 如下赋值方式允许,但是一种 糟糕 的做法,因为需要编译器计算数组元素个数。

int arr[] = {0,1,2,3}; // ok,but worse

  1. 禁止缩窄数据宽度

如将 float 类型赋给 int

4.2 字符串

  1. 字符串标志:以空字符(\0)作为结尾

char dog[3] = {‘d’, ‘o’, ‘g’};
// 字符

char cat[4] = {‘c’,‘a’,‘t’,‘\0’};
//字符串,实际只能存储3个字符

note:字符串数组最后一个元素用于存储空字符‘\0’(必须)

  1. 将数据初始化为字符串的方法:

char cat[4] = “cat”; //字符串常量或字符串字面值

  1. 字符串常量(使用“”),不能与字符常量(使用‘’)互换。因为:

char s1 = ‘s’; // s

char s1 = “s”; // s + \0

4.3 在数组中使用字符串

//下面为不完整代码

const int size = 15;

char name[size] = “C++ nice”;

name[3] = ‘\0’;

cout << name << endl;

//输出结果

C++

//存在问题的程序

#include

int main()

{

using namespace std;

const int size = 20;

char name[size];

char desert[size];

cout << “Enter your name: \n”;

cin >> name; //Hai

cout << “Enter your favorite
desert: \n”;

cin >> desert;  //mian

cout << “I have some delicious ”
<< desert;

cout << “ for you, ”<< name <<
endl;

return 0;

}

//输出结果:

Enter
your name:

Hai
mian baby

Enter
your favorite desert:

I
have some delicious mian for you, Hai.

//程序出错原因:

cin
使用空白(空格、制表符和换行符)确定字符串的结束位置,因此cin 在输入时只读取一个单词,故 将Hai 赋值给 name,而将 mian 赋给 desert。

//解决方法:

cin.getline(name,20);  // cin >> name;

cin.getline(desert,
20); // cin >> desert;

4.3.1 解决cin每次只读取一个单词的问题

istream中的类cin 提供面向行的类成员函数,getline()和get(),两个函数不同的是,getline()会将换行符丢弃,而get()会将换行符保留在输入队列中。

1.  每次读取一行字符串输入

(1)面向行的输入getline()

cin.getline(array
name, string length);

note:
string length:应将\0计算在内

(2)面向行的输入get()

cin.get(array
name, string length);

cin.get():

or

cin.get(array
name, string length).get();

由于get会将换行符保留在输入队列中,若要去除,需在加一句,cin.get();

2.getline 与 get 读取空行存在问题

get 会设置失效位,将后面的输入阻断,用 cin.clear() 来恢复输入。

3.  getline 与 get 分配的空间不够长

getline 会设置失效位,将后面的输入阻断。

4.3.1 混合输入字符串和数字

//这个程序存在的问题和4.3第2个程序存在的问题相同

#include

int
main()

{

using namespace std;

cout << “What year was your house built?\n”;

int year;

cin >> year;

cout << “What is its street address?\n”;

char address[80];

cin.getline(address, 80);

cout << “Year built: ” << year
<< endl;

cout << “Address: ” << address
<< endl;

cout << “Done!” << endl;

return 0;

}

//输出结果:

What
year was your house built?

1997

What
is its street address?

Year
built: 1997

Address:

Done!

//程序错误原因

cin
使用空白(空格、制表符和换行符)确定字符串的结束位置,因此cin 在输入时只读取一个单词,会将 \n 保留在输入队列中,导致 1997 + \n 中的 \n 赋值给 address

//解决方法:

cin

year;

cin.get();
// cin.get(ch);

or

(cin

year).get(); // (cin >> year).get(ch);

#  C++ 常使用指针处理字符串

4.4 string
类简介

string类可用来存储字符串

提供using编译指令,因为string位于名称空间 std

string str = “string”; // ok

cout
<< str[0] << endl; // s, 可以使用数组来访问string对象

cout
<< str[1] << endl; // t

可以使用cin来将键盘宿儒存储到string对象中,可以使用cout来显示string对象,可以使用数组来访问string对象。

类设计让程序能够自动处理string的大小

4.4.1 赋值、拼接和附加

string
str1;

string
str2 = “panda”;

str1 = str2;  // 赋值,数组不允许

string
str3;

str3 = str1 + str2; // 拼接

str1 += str2; // 附加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi小黄人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值