概述
第八章编程练习
1. 编写通常接受一个参数(字符串的地址),并打印该字符串的函数。然而,如果提供了第二个函数(int类型),且该参数不为0,则该函数打印字符串的次数将为该函数被调用的次数(注意,字符串的打印次数不等于第二个参数的值,而等于函数被调用的次数)。是的,这是一个非常可笑的函数,但它让您能够使用本章介绍的一些技术。在一个简单的程序中使用该函数,以演示该函数是如何工作的。
#include<iostream>
#include<cstring>
using namespace std;
void Test(string x,int n=1);
int main(){
string a="ABC";
Test(a);
cout<<endl;
Test(a,10);
cout<<endl;
Test(a,100);
}
void Test(string x,int n){
static int Time=0;
//静态变量
Time++;
if(n==1) cout<<x;
else
for(int i=0;i<Time;i++){
cout<<x;
}
}
输出:
ABC
ABCABC
ABCABCABC
2. CandyBar结构包含3个成员。第一个成员存储candy bar的品牌名称;第二个成员存储candy bar的重量(可能有小数);第三个成员存储candy bar的热量(整数)。请编写一个程序,它使用一个这样的函数,即将CandyBar的引用、char指针、double和int作为参数并用最后3个值设置相应的结构成员。最后3个参数的默认值分别为“Millennium Munch”、2.85和350。另外,该程序还包含一个以CandyBar的引用为参数,并显示结构内容的函数,请尽可能的使用const。
#include<iostream>
using namespace std;
struct CandyBar{
string Name;
double Height;
int Hot;
};
void Test(CandyBar &x,const char* y="Millenium Munch",const double i=2.85,const int j=350);
int main(){
struct CandyBar Box_1;
struct CandyBar Box_2;
Test(Box_1);
cout<<endl;
Test(Box_2,"HUANG",170,250);
}
void Test(CandyBar &x,const char* y,const double i,const int j){
x.Name=y;
x.Hot=j;
x.Height=i;
cout<<x.Name<<endl;
cout<<x.Height<<endl;
cout<<x.Hot<<endl;
}
输出
`Millenium Munch
2.85
350
HUANG
170
250:
3.编写一个函数,它接受一个指向string对象的引用作为参数,并将该string对象的内容转换为大写,为此可使用表6.4描述的函数toupper()。然后编写一个程序它通过使用一个循环让你能够用不同的输入来测试这个函数,该程序的运行情况如下:
Enter a string (q to quit): go away
GO AWAY
Next string (q to quit): good grief!
GOOD GRIEF!
Next string (q to quit):q
Bye.
#include<iostream>
using namespace std;
void Test(string &x);
int main(){
string Str;
cout<<"Enter a string (q to quit):";
while(getline(cin,Str)&&Str!="q"){
//getline(cin,string)是针对string的,可读入空格 ;
cin 不能读入空格
Test(Str);
cout<<Str<<endl;
cout<<"Next string (q to quit):";
}
cout<<"Bye.";
}
void Test(string &x){
for(int i=0;i<x.size();i++){
//if(x[i]>=97) x[i]=(x[i]-97)+65;
//ASCALL 'a'=97
'A'=65
if(x[i]>=97) x[i]=toupper(x[i]);
//toupper()函数直接将小写换成大写字母
}
}
输出
Enter a string (q to quit):go away
GO AWAY
Next string (q to quit):good grief
GOOD GRIEF
Next string (q to quit):q
Bye.
4.下面是一个程序框架
#include<iostream>
using namespace std;
#include<cstring> //for strlen(),strcpy()
struct stringy {
char * str; //points to a string
int ct; //length of string (not couting '