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 编写一段程序,定义两个字符数组并用字符串字面值初始化它们;接着再定义一个字符数组存放前面两个数组连接后的结果。使用strcpy
和strcat
把前两个数组的内容拷贝到第三个数组当中
答:
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,是一个数组;