C++-练习-57

 题目:

改进以下代码:

#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;
    
}

演示效果:

c7946920249c554a7509d5fec98f770a.png


如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

猜你喜欢

转载自blog.csdn.net/little_startoo/article/details/142908861