C++Primer(第五版 )第三章 字符串、向量和数组 章节编程练习答案

本文提供了一系列C++编程练习题目,涵盖了字符串比较、连接、替换、输入输出、数组初始化及操作等内容。通过这些练习,读者可以深入理解C++中字符串和数组的使用方法,包括范围for语句、迭代器、指针以及标准库函数的应用。
摘要由CSDN通过智能技术生成

3.4 编写一段程序读取两个字符串,比较其是否相等并输出结果。如果不等,输出比较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。

答:

比较大的

长度大的

3.5 编写一段程序从标准输入中读入多个字符串并将他们连接起来,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分割开来。

答:

未隔开的

隔开的

3.6 编写一段程序,使用范围for语句将字符串内所有字符用X代替。

答:

for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。

for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。

3.9 下面的程序有何作用?它合法吗?如果不合法?为什么?

答:不合法。使用下标访问空字符串是非法的行为。

3.10 编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。

答:

3.11 下面的范围for语句合法吗?如果合法,c的类型是什么?

答:要根据for循环中的代码来看是否合法,c是string 对象中字符的引用s是常量。因此如果for循环中的代码重新给c赋值就会非法,如果不改变c的值,那么合法。

3.12 下列vector对象的定义有不正确的吗?如果有,请指出来。对于正确的,描述其执行结果;对于不正确的,说明其错误的原因。

答:

3.13 下列的vector对象各包含多少个元素?这些元素的值分别是多少?

答:

3.17 从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改为大写形式。输出改变后的结果,每个词占一行。

答:

3.18 下面的程序合法吗?如果不合法,你准备如何修改?

答:

不合法。应改为

3.19 如果想定义一个含有10个元素的vector对象,所有元素的值都是42,请例举三种不同的实现方法,哪种方式更好呢?

答:

第一种方式最好。

3.20 读入一组整数并把他们存入一个vector对象,将每对相邻整数的和输出出来。改写你的程序,这次要求先输出第一个和最后一个元素的和,接着输出第二个和倒数第二个元素的和,以此类推。

答:

或用迭代器

3.21 请使用迭代器重做3.3.3节的第一个练习。

答:

3.23 编写一段程序,创建一个含有10个整数的vector对象,然后使用迭代器将所有元素的值都变成原来的两倍。输出vector对象的内容,检验程序是否正确。

答:

3.25 3.3.3节划分分数段的程序是使用下标运算符实现的,请利用迭代器改写该程序实现完全相同的功能。

答:

3.26 在100页的二分搜索程序中,为什么用的是 mid = beg + (end - beg) / 2, 而非 mid = (beg + end) / 2 ; ?

答:因为两个迭代器相互之间支持的运算只有 - ,而没有 + 。 但是迭代器和迭代器差值(整数值)之间支持 +

3.28 下列数组中元素的值是什么?

答:数组的元素会被默认初始化。 sa的元素值全部为空字符串,ia 的元素值全部为0。 sa2的元素值全部为空字符串,ia2的元素值全部未定义。

3.29 相比于vector 来说,数组有哪些缺点,请例举一些。

答:

  • 数组的大小是确定的。
  • 不能随意增加元素。
  • 不允许拷贝和赋值。

3.31 编写一段程序,定义一个含有10个int的数组,令每个元素的值就是其下标值。

答:

3.32 将上一题刚刚创建的数组拷贝给另一数组。利用vector重写程序,实现类似的功能。

答:

3.35 编写一段程序,利用指针将数组中的元素置为0。

答:

3.36 编写一段程序,比较两个数组是否相等。再写一段程序,比较两个vector对象是否相等。

答:

3.37 下面的程序是何含义,程序的输出结果是什么?

3.38 在本节中我们提到,将两个指针相加不但是非法的,而且也没有什么意义。请问为什么两个指针相加没有意义?

答:将两个指针相减可以表示两个指针(在同一数组中)相距的距离,将指针加上一个整数也可以表示移动这个指针到某一位置。但是两个指针相加并没有逻辑上的意义,因此两个指针不能相加。

3.39 编写一段程序,比较两个 string 对象。再编写一段程序,比较两个C风格字符串的内容。

答:

3.40 编写一段程序,定义两个字符数组并用字符串字面值初始化它们;接着再定义一个字符数组存放前面两个数组连接后的结果。使用strcpystrcat把前两个数组的内容拷贝到第三个数组当中

答:

3.41 编写一段程序,用整型数组初始化一个vector对象。

答:

3.42 编写一段程序,将含有整数元素的 vector 对象拷贝给一个整型数组。

答:

3.43 编写3个不同版本的程序,令其均能输出ia的元素。 版本1使用范围for语句管理迭代过程;版本2和版本3都使用普通for语句,其中版本2要求使用下标运算符,版本3要求使用指针。 此外,在所有3个版本的程序中都要直接写出数据类型,而不能使用类型别名、auto关键字和decltype关键字。

答:

注   int (*p)[4] 和 int *p[4]区别:

int *p[4]是个数组,每个元素都是一个int *指针。长度为4,是有四个元素的数组;

int (*p)[4]是个指针,指向有四个int类型bai数据的数组。长度为1,是一个数组;


​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值