AC++第一章答案

1-0 这里不得不提一下,本章例子中程序没有问题,但是输出的图案补胎好看,与例子上面演示结果不符,若要相符,将greeting的定义改为:

const std::string greeting = " Hello, " + name + "! ";

也就是在Hello的前面和!的后面各加上一个空格,并且删去在输出greeting中第一个*后面的空格即可。

1-1 有效,因为字符串由“ ”赋初值,字符串之间可以使用+进行组合,此处+为符号的重载。

1-2 经过测试,发现定义无效,错误原因为invalid operands to binary expression ('const char *' and 'const char  *')

我将程序改为如下:

#include <iostream>

#include<string>

using namespace std;

int main()

{

const string exclam=" ! ";

const string message= "Hello"+(",world"+exclam);

cout<<message;

return 0;

}

发现可以执行。我认为是由于+在重载定义时其两边虽然可以均是字符串或字符串加字符串常量,但是中间变量不允许出现两个常量字符串相加的结果。即加号左边不允许出现"hello"+" !"的中间变量的情况,而加号右边允许出现该情况。

我觉得这个是重载定义的问题,如果更改+的定义,应该可以纠正此情况。

1-3 有效。虽然定义了两个同样的s字符串,但是这两个字符串属于不同的局部变量,分别被两对{}包含,因此相互不影响,当第一对{}结束时,里面的第一个s已经失效,编译器也不再保留第一个s。

1-4 有效。同样两个s其实属于不同的局部,第一个时大的局部,第二个是小的局部。在系统运行到小的局部时发现有同样的s需要定义,会重载一个s,即自动识别其为s[2],此s[2]在小的局部结束时自动失效。

    在更改}}为};}后仍然有效。因为相当于在小的局部结束后添加了一条空语句 ;不影响整个程序的执行。

1-5 同上题一样,当x在小的局部定义时,一旦小局部结束,x这个局部变量就失效,等于不存在了,自然无法输出。若要让x输出,只需要将x的输出一行放入小局部的{}之中就可以了。

源代码:

#include <iostream>

#include<string>

using namespace std;

int main()

{

{string s="a string";

{string x=s+", really";

cout<<s<<endl;

cout<<x<<endl;}

}

return 0;

}

1-6 系统会自动以空格为间隔分开读入输入的两个字符串,并且忽略空格这个字符。即如果要输入名和姓,之间不可以有空格符,或者分开读取。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值