#include <iostream>
#include <string>
#include <cctype>
#include <cstring>
using namespace std;
//函数原型
void p8_1(void);
void p8_2(void);
void p8_3(void);
void p8_4(void);
void p8_5(void);
void p8_6(void);
void p8_7(void);
//主函数
int main()
{
//p8_1();
//p8_2();
//p8_3();
//p8_4();
//p8_5();
//p8_6();
p8_7();
return 0;
}
//函数定义
//-----------作业一----------------
void print_str(const string str,int num=1)
{
cout<<str<<"\t"<<num<<endl;
if(num>1)
{
num--;
print_str(str,num);
}
return;
}
void p8_1(void)
{
cout<<"Enter the string: ";
string str;
getline(cin,str);
cout<<"Enter the time: ";
int time=0;
cin>>time;
print_str(str,time);
cout<<"--------------"<<endl;
print_str(str);
return;
}
//-------------------作业二-------------------
struct candybar
{
char* name;
double weight;
int carlo;
};
void candy_fill(candybar & can,char* str,double wei,int car)
{
can.name=str;
can.weight=wei;
can.carlo=car;
}
void show_candy(const candybar & candy)
{
cout<<candy.name<<endl;
cout<<candy.weight<<endl;
cout<<candy.carlo<<endl;
}
void p8_2(void)
{
candybar candy;
char name[50];
double weight;
int carlo;
cout<<"Enter the name:";
cin.getline(name,50);
cout<<"Enter the weight:";
cin>>weight;
cout<<"Enter the carlo:";
cin>>carlo;
candy_fill(candy,name,weight,carlo);
show_candy(candy);
return;
}
//-----------------作业三----------------
//toupper(),参数小写返回大写,否则返回其参数
void convert_str(string & str)
{
for(int i=0;i<(str.length());i++)
str[i]=toupper(str[i]);//string也可以如同数组使用
cout<<str<<endl;
}
void p8_3(void)
{
cout<<"Enter a string(q to quit):";
string str;
getline(cin,str);
while(str!="q")
{
convert_str(str);
cout<<"Next string(q to quit):";
getline(cin,str);
}
return;
}
//-------------作业四---------------------
struct stringy
{
char* str;
int ct;
};
void show(stringy & str1,int times=1)
{
while(times>0)
{
cout<<str1.str<<endl;
times--;
}
return;
}
void show(const char* str2,int times=1)
{
while(times>0)
{
cout<<str2<<endl;
times--;
}
return;
}
void set(stringy & str3,const char* arr)
{
int num=strlen(arr);//strlen不计算\0
char * ps=new char[num+1];//记得delete
/*for(int i=0;i<(num+1);i++)
ps[i]=arr[i];*/
strcpy(ps,arr);//两种都可以运行,此处有警告
//此处要自己补'\0'
str3.str=ps;
str3.ct=strlen(arr);
}
void p8_4(void)
{
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;
return;
}
//----------------作业五-------------------
template<typename T>
T max5(const T arr[])
{
T max=arr[0];
for(int i=0;i<5;i++)
{
if(arr[i]>max)
max=arr[i];
}
return max;
}
void p8_5(void)
{
int arr1[5]={1,2,3,4,5};
double arr2[5]={11.1,12.0,1.0,5.8,20.3};
int max_int=max5(arr1);
cout<<max_int<<endl;
double max_double=max5(arr2);
cout<<max_double<<endl;
return;
}
//-----------作业六--------------
template<typename T>
T maxn(T arr[],int num)
{
T max=arr[0];
for(int i=0;i<num;i++)
{
if(arr[i]>max)
max=arr[i];
}
return max;
}
//模板具体化,显式具体化
template<> char* maxn<char*>(char* arr1[],int num)
{
//用strlen()函数
char* ps=arr1[0];
for(int i=0;i<num;i++)
{
if(strlen(arr1[i])>strlen(ps))
ps=arr1[i];
}
return ps;
}
void p8_6(void)
{
int arr1[6]={1,2,3,4,5,6};
double arr2[4]={10.1,20.2,30.3,40.4};
char* arr3[5]={"HELLO","hi","APP","aaa","nb"};
int max_int=maxn(arr1,6);
double max_double=maxn(arr2,4);
char* max_char=maxn(arr3,5);
cout<<max_int<<endl;
cout<<max_double<<endl;
cout<<max_char<<endl;
return;
}
//--------------作业七------------------
struct debts
{
char name[50];
double amount;
};
template<typename T>
T sum_array(T arr[],int num)
{
T sum=0;
for(int i=0;i<num;i++)
sum+=arr[i];
return sum;
}
template<typename T>
T sum_array(T* arr[],int num)
{
T sum=0;
for(int i=0;i<num;i++)
sum+=*arr[i];
return sum;
}
void p8_7(void)
{
int things[6]={1,2,3,4,5,6};
struct debts my[3]=
{{"AAA",10.0},
{"BBB",20.0},
{"CCC",30.0}
};
int sum_int=sum_array(things,6);
cout<<sum_int<<endl;
double* arr[3];
for(int i=0;i<3;i++)
{
arr[i]=&(my[i].amount);
}
double sum_double=sum_array(arr,3);
cout<<sum_double<<endl;
}
如有错误,欢迎指正!