C++ Primer Plus(第6版)---编程作业完成(第八章)

本文介绍了C++中的几个关键编程任务,包括字符串处理函数`print_str`、结构体与函数应用`candybar`、字符转换`convert_str`,以及模板函数`max5`和`maxn`。通过实例展示了字符串操作、数据结构和模板技巧的使用。
摘要由CSDN通过智能技术生成
#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;
}

如有错误,欢迎指正! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值