C++ primer 第六版 第八章编程练习

//1.
#include<iostream>
using std::cout;
using std::endl;
void ShowStr(const char *,int n = 0);
void PrintStr(const char *);
int main()
{
    char str1[] = "biubiubiubiubiu";
    char str2[] = "xxxx";
    cout << "1:" << endl;
    ShowStr(str1);

    cout << "2:" << endl;
    ShowStr(str2,10);

    cout << "3:" << endl;
    ShowStr(str1);

    cout << "4:" << endl;
    ShowStr(str2);

    cout << "5:" << endl;
    ShowStr(str1,1234);

    return 0;
}

void ShowStr(const char *str, int n) 
{ 
    static int count = 0;
    ++count;

    if (!n)
    {
        PrintStr(str);
    }
    else
    {
        for (int i = 0; i < count; ++i)
        {
            PrintStr(str);
        }
    }

}
void PrintStr(const char *str) 
{
    cout << str << endl;
}
//2.
#include<iostream>
#include<cstring>
using std::cout;
using std::endl;
struct CandyBar
{
    char name[20];
    double weight;
    int heat;
};
void SetCandyBar(CandyBar &candy,
    const char * name = "Millennium Munch",
    double weight = 2.85,
    int heat = 350);
void ShowCandyBar(const CandyBar &);
int main()
{
    CandyBar candy;

    SetCandyBar(candy);
    ShowCandyBar(candy);

    const char ch[] = "tangtang";
    SetCandyBar(candy, ch, 10.11, 400);
    ShowCandyBar(candy);

    return 0;
}

void SetCandyBar(CandyBar &candy,const char * name,double weight,int heat)
{
    strcpy_s(candy.name, 20, name);
    candy.weight = weight;
    candy.heat = heat;
}
void ShowCandyBar(const CandyBar &candy)
{
    cout << "candyname:" << candy.name << endl
    << "candyweight:" << candy.weight << endl
    << "candyheat:" << candy.heat << endl;
}
//3.
#include<iostream>
#include<string>
using std::string;

void GetToupperStr(string &);
int main()
{
    string str;
    std::cout << "Enter a string (q to quit):";
    while (getline(std::cin,str))
    {
        if (str != "q")
        {

            GetToupperStr(str);
            std::cout << str << std::endl;
            std::cout << "Next string (q to quit):";
        }
        else
        {
            std::cout << "Bye" << std::endl;
            break;
        }
    }
    return 0;
}
void GetToupperStr(string &str)
{
    for (size_t i = 0; i < str.size(); ++i)
    {
        str[i] = toupper(str[i]);
    }
}
//4
#include<iostream>
using namespace std;
#include<cstring>
struct stringy
{
    char * str;
    int ct;
};
void set(stringy &,const char *);
void show(const stringy &, const int n = 1);
void show(const char *, const int n = 1);
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!");

    delete [] beany.str;
    beany.str = NULL;
    beany.ct = 0;

    return 0;

}
void set(stringy &s, const char *str)
{
    int len = strlen(str);
    s.str = new char[len + 1];
    strcpy_s(s.str, len + 1, str);

    s.ct = len;
}
void show(const stringy &s, const int n)
{
    for (int i = 0; i < n; ++i)
    {
        std::cout << s.str << std::endl;
    }
}

void show(const char *str, const int n)
{
    for (int i = 0; i < n; ++i)
    {
        std::cout << str << std::endl;
    }
}
//5
#include<iostream>
using namespace std;
const int len = 5;

template<typename T>
T max5(const T *);

int main() 
{
    int intList[len] = { 1,2,3,4,5 };
    cout << max5(intList) << endl;

    double doubleList[len] = { 1.01,2.03,22.2,102.001,1.02 };
    cout << max5(doubleList) << endl;

    return 0;

}

template<typename T>
T max5(const T * str)
{
    T maxValue = str[0];

    for (int i = 1; i < len; ++i)
    {
        if (str[i] > maxValue)
        {
            maxValue = str[i];
        }
    }
    return maxValue;
}
//6
#include<iostream>
using namespace std;

template<typename T>
T maxn(T * str,int len);

template <> 
char * maxn(char * str[], int len);

int main() 
{
    int intList[6] = { 1,2,5,6,3,4 };
    cout << maxn(intList, 6) << endl;

    double doubleList[4] = { 1.01,2.03,22.2,1.02 };
    cout << maxn(doubleList, 4) << endl;

    char * strList[5] = { "qaq","wwwwww","quq","qvq","qwq" };
    cout << maxn(strList, 5) << endl;

    return 0;
}

template<typename T>
T maxn(T * str,int len)
{
    if (len < 0)
    {
        return *str;
    }

    T maxValue = str[0];
    for (int i = 1; i < len; ++i)
    {
        if (str[i] > maxValue)
        {
            maxValue = str[i];
        }
    }
    return maxValue;
}

template<>
char * maxn(char *str[],int n) 
{
    char * p = NULL;
    int maxLen = -1;

    for (int i = 0; i < n; ++i)
    {
        int nTempLen = strlen(str[i]);
        if (nTempLen > maxLen)
        {
            maxLen = nTempLen;
            p = str[i];
        }
    }
    return p;
}
//7
#include<iostream>

template<typename T>
T SumArray(T arr[], int n);

template<typename T>
T SumArray(T * arr[], int n);

struct debts 
{
    char name[50];
    double amount;
};

int main() 
{
    using namespace std;
    int things[6] = { 13,31,103,301,310,130 };
    struct debts mr_E[3]
    {
        { "Ima Wolfe", 2400.0 },
        { "Ura Foxe", 1300.0 },
        { "Iby Stout", 1800.0 }
    };
    double * pd[3];

    for (int i = 0; i < 3; ++i)
    {
        pd[i] = &mr_E[i].amount;
    }

    cout << "Listenting Mr.E's debt:\n";
    cout << SumArray(things, 6) << endl;
    cout << "Listing Mr.E's debt:\n";
    cout << SumArray(pd, 3) << endl;

    return 0;
}

template<typename T>
T SumArray(T arr[], int n)
{
    using namespace std;
    T sum = arr[0];
    cout << "template A\n";
    for (int i = 1; i < n; ++i)
    {
        sum += arr[i];
    }
    return sum;
}

template<typename T>
T SumArray(T * arr[], int n)
{
    using namespace std;
    T sum = *arr[0];
    cout << "template B\n";
    for (int i = 1; i < n; ++i)
    {
        sum += *arr[i];
    }
    return sum;

}

猜你喜欢

转载自blog.csdn.net/sinat_35205772/article/details/81483123
今日推荐