第一题
#include <iostream>
#include <string>
using namespace std;
void show_str(string &pf,int n = 0);
int times = 0;
int main()
{
string str = "I love you!";
show_str(str);
show_str(str,20);
show_str(str,10);
show_str(str,5);
cin.get();
cin.get();
return 0;
}
void show_str(string &pf,int n)
{
if(n == 0)
cout << &pf << endl;
else
{
times++;
cout << "该函数被调用了" << times << "次" << endl;
}
}
第二题
#include <iostream>
#include <string>
using namespace std;
struct CandyBar
{
char barnd[80];
double weight;
int heat;
};
void set_CandyBar(CandyBar &pf,char *pt = "Millennium",double w = 2.85,int h = 350);
void show_CandyBar(const CandyBar &pf);
int main()
{
CandyBar candy_bar;
set_CandyBar(candy_bar);
show_CandyBar(candy_bar);
char brand[80] = "ShiLiJia" ;
set_CandyBar(candy_bar,brand,3.89,800);
show_CandyBar(candy_bar);
cin.get();
cin.get();
return 0;
}
void set_CandyBar(CandyBar &pf,char *pt,double w,int h)
{
//在这里一开始我用的是这条语句:pf.barnd = pt,这样做的话最后会出现一个表达式必须是
//可修改的左值,因此要改成strcpy(pf.brand,pt),这样才是正确的。
strcpy(pf.barnd,pt);
pf.weight = w;
pf.heat = h;
}
void show_CandyBar(const CandyBar &pf)
{
cout << "Brand: "<< pf.barnd;
cout << ", Weight: " << pf.weight;
cout << ", Heat; " << pf.heat << endl;
}
第三题
#include <iostream>
#include <string>
using namespace std;
void str2upper(string &str);
int main()
{
string str;
cout << "Enter a string (q to quit):";
getline(cin,str);
while(str != "q")
{
str2upper(str);
cout << str << endl;
cout << "Next string (q to quit)";
getline(cin,str);
}
cout << "Bye." << endl;
cin.get();
cin.get();
return 0;
}
void str2upper(string &str)
{
//一开始总是想不明白,这里传进来的str引用要怎么使用toupper函数
//最后看了其他人的博客才明白原来传进来的str引用可以相当于一个数组
//去使用。学到东西了,
//参考博客地址为:http://blog.csdn.net/lmerissa/article/details/50509257
for(int i = 0;i<str.size();i++)
str[i] = toupper(str[i]);
}
第四题
#include <iostream>
#include <cstring>
using namespace std;
struct stringy
{
char *str;
int ct;
};
void set(stringy &pf, char *str);//在这里不能使用const char* str声明第二个参数,如果这样做的话就会导致后面无法直接对pf.str进行赋值
void show(const stringy &pf,const int n = 1);
void show(const char*str,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!");
cin.get();
cin.get();
return 0;
}
void set(stringy &pf, char *str)
{
//strcpy(pf.str,str);
pf.str = str;
pf.ct = sizeof(str);
}
void show(const stringy &pf,const int n)
{
for(int i = 0; i<n; ++i)
cout << "show(beany)" << pf.str << endl;
}
void show(const char *str,const int n)
{
for(int i = 0; i<n; ++i)
cout << str << endl;
}
第五题
#include <iostream>
template <typename T>
T max_element(T a[]);
int main()
{
using namespace std;
int a[5] = {1,2,3,4,5};
double b[5] = {1.33,5.26,4.36,6.32,9.22};
cout << "整型数组中最大的元素为" << max_element(a) << endl;
cout << "double 型数组中最大的元素为:" << max_element(b) << endl;
cin.get();
cin.get();
return 0;
}
template<typename T>
T max_element(T a[])
{
T temp;
temp = a[0];
for(int i = 1;i<5;i++)
{
if(temp<a[i])
temp = a[i];
}
return temp;
}
第六题
#include <iostream>
template<typename T>
T maxn(T *arr, const int n);
template <> char *maxn<char *>(char *p[],const int n);
int main()
{
using namespace std;
int arr_i[6] = { 1, 2, 3, 4, 5, 6 };
double arr_d[4] = { 8.6, 15.6, 10.63, 20.3 };
char *p[5] = { "January", "March", "May", "September", "October" };
cout << "The max of five int numbers is: " << maxn(arr_i, 6) << endl;
cout << "The max of five double number is: " << maxn(arr_d, 4) << endl;
cout << "The max length of the sTtring is: " << maxn(p, 5) << endl;
cin.get();
cin.get();
return 0;
}
template <typename T>
T maxn(T * arr, const int n)
{
if (n == 0)
return 0;
T max_num = arr[0];
for (int i = 1; i < n; ++i)
if(max_num < arr[i])
{
max_num = arr[i];
}
return max_num;
}
template <> char *maxn<char *>(char *p[], const int n)
{
if (n == 0)
return nullptr;
char *pt = p[0];
for (int i = 1; i < n; ++i)
if(strlen(pt)<strlen(p[i]))
{
pt = p[i];
}
return pt;
}