题目:
改进以下代码:
#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 to be.";
set(beany, testing);
show(beany);
show(beany, 2);
testing[0] = 'D';
testing[1] = 'u';
show(testing);
show(testing, 3);
show("Done!");
return 0;
}
set():第一个参数是一个引用,分配空间来保存测试副本,将beany的str成员设置为指向新块,将测试复制到新块,并设置beany的ct成员
show(beany);打印字符串一次
show(beany, 2);打印字符串两次
应有两个show()函数,每个都是用默认参数。请尽可能使用const参数。set()使用new分配足够的空间来存储指定的字符串。
源代码:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <cstring>
struct stringy {
char* str;
int ct;
};
void set(stringy& beany, char* testing);
template <typename T>
void show(const T& st);
template <typename T>
void show(const T& st, int size);
template <> void show<stringy>(const stringy& st);
template <> void show<stringy>(const stringy& st,int size);
int main()
{
stringy beany;
char testing[] = "Reality isn't what it used to be.";
set(beany, testing);
show(beany);
show(beany, 2);
testing[0] = 'D';
testing[1] = 'u';
show(testing);
show(testing, 3);
show("Done!");
return 0;
}
void set(stringy& beany, char* testing)
{
beany.str = new char[strlen(testing)];
strcpy(beany.str, testing);
beany.ct = strlen(beany.str);
}
template <typename T>
void show(const T& st)
{
std::cout << st << std::endl;
}
template <typename T>
void show(const T& st, int size)
{
if (size > 1)
show(st, --size);
std::cout << st << std::endl;
}
template <> void show<stringy>(const stringy& st)
{
std::cout << st.str << std::endl;
}
template <> void show<stringy>(const stringy& st, int size)
{
if (size > 1)
show(st, --size);
std::cout << st.str << std::endl;
}
演示效果:
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈