原创答案,仅供参考
编译环境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;
}