C++ primer plus 第六版 课后答案 8.4

来源:互联网 发布:mmorpg推荐 知乎 编辑:程序博客网 时间:2024/06/08 17:25

原创答案,仅供参考

编译环境windows 8.1,编译器 vs2013

经过测试一切正常:


题目:

 下面是一个程序框架:

#include <iostream>
using namespace std;
#include <cstring>
struct stringy
{
 char *str;
 int ct;
};
int main()
{
 stringy beany;
 char testing[]="Reality isn't what it used tobe.";
 set(beany,testing);
 show(beany);
 show(beany,2);
 testing[0]='D';
 testing[1]='u';
 show(testing);
 show(testing,3);
 show("Done! ");
 return 0;
}
请提供其中描述的函数和原型,从而完成该程序。注意,应用两个show()函数,每个都使用默认参数。
请尽可能使用const参数。set()使用new分配足够的空间来存储指定的字符串。这里使用的技术与设计和实现类时使用

的相似(可能还必须修改头文件的名称,删除using编译指令,这取决于所用的编译器)


#include "stdafx.h"#include <iostream>#include <cstring>//strlen(),strcpy()using namespace std;struct stringy{char *str;//指向字符串int ct;//字符串的长度};void set(stringy &beany,const char arr[]){int ct = strlen(arr);//测量字符串长度beany.ct = ct;//储存长度beany.str = new char [ct+1];//根据长度开辟空间strcpy_s(beany.str, 40, arr);//复制数组到新空间}void show(stringy &beany,int repeat=1){while (repeat--)cout << beany.str << endl;}void show(char arr[], int repeat = 1){while (repeat--)cout << arr << endl;}int main(){stringy beany;char testing[] = "Reality isn't what it used to be.";set(beany, testing);//第一个参数是一个参考//分配空间来保存测试副本//设置beany的str成员指向新块//复制testing去新块//并且设置beany的ct成员show(beany);//打印member字符串一次show(beany, 2);//打印member字符串三次testing[0] = 'D';testing[1] = 'u';show(testing);//打印testing字符串一次show(testing, 3);//打印testing字符串三次show("Done!");while (1);return 0;}


0 0