概述
// 第八章.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>//预编译,使用iostream文件在编译前替代这行代码
#include <array>
#include <string>
#include <iomanip>
#include<typeinfo>
const int SIZE = 101;
static int flag = 0;
using namespace std;//将使用std命名空间中的定义
/* 编写一个通常接受一个参数(字符串的地址),并打印该字符串的函数。
然而,如果提供了第二个参数(int)类型,且该参数不为0,则该函数打印字符串的次数将为该函数被调用的次数。
(注意,字符串的打印次数不等于第二个参数的值,而等于函数被调用的次数)。
是的,这是一个非常可笑的函数(我怎么不觉得可笑,手动微笑),但它能让您使用本章介绍的一些技术。
在一个简单的程序中使用该函数,以演示该函数是如何工作的。
*/
void print(string str,int n=0);
void print(string str, int n)
{
flag++;
cout << "第" << flag << "次调用print函数:n";
if (n!=0)
{
for (int i = 0; i < flag; i++)
{
cout <<str << endl;
}
}
else
cout << str << endl;
}
void Xiti1()//
{
string str;
int n=1;
while (n!=0)
{
cout << "输入字符串:";
cin.get();
getline(cin, str);
cout << "输入一个整数:";
if (cin >> n)
{
cout << "输入了字符和数字,执行双参数n";
print(str, n);
}
else
{
cout << "仅输入字符,执行默认值n";
print(str);
}
}
return;
}
/*. CandyBar结构包含3个成员。第一个成员存储candy bar的品牌名称;第二个成员存储candy bar的重量(有可能有小数);
第三个成员存储candy bar的热量。请编写一个程序,它使用一个这样的函数,即将CandyBar的引用、char指针、double和int作为参数,
并用最后3个值设置相应的结构成员。最后3个参数的默认值分别为"Millennium Munch"、2.85 和350。
另外,该程序还包含一个以CandyBar的引用为参数,并显示结构内容的函数。请尽可能使用const。
。*/
struct CandyBar
{
char pinpai[30];
double weight;
int reliang;
};
void setting(CandyBar &cb ,const char*pp="Millennium Munch",const double weight=2.85,const int reliang=350);
void setting(CandyBar &cb, const char*pp, const double weight,const int reliang)
{
strcpy_s(cb.pinpai, pp);
cb.reliang = reliang;
cb.weight = weight;
}
void display(const CandyBar &cb);
void display(const CandyBar &cb)
{
cout << "品牌为:" << cb.pinpai<<endl;
cout << "重量为:" << cb.weight << endl;
cout << "热量为:" << cb.reliang << endl;
}
void Xiti2()//
{
CandyBar cb;
char pinpai[30];
double weight;
int reliang;
setting(cb);
cout << "默认值n";
display(cb);
cout << "输入品牌:n";
cin.get();
cin.getline(pinpai, 30);
cout << "输入重量:";
cin >> weight;
cout << "输入热量:n";
cin >> reliang;
setting(cb, pinpai, weight, reliang);
display(cb);
setting(cb);
cout << "默认值n";
display(cb);
return;
}
/*编写一个函数,它接受一个指向string对象的引用作为参数,并将该string对象的内容转换为大写,
为此可使用cctype中的字符函数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.
*/
void toup(string & str);
void toup(string & str)
{
for (unsigned int i = 0; i < str.size(); i++)
{
str[i]=toupper(str[i]);
}
}
void Xiti3()//简述:
{
cout << "输入一个字符串:n";
string str;
cin.get();
getline(cin, str);
while ('q'!=str[0])
{
toup(str);
cout << str<<endl;
cout << "来,下一个";
getline(cin, str);
}
cout << "bye!";
return;
}
/*.请提供其中描述的函数和原型,从而完成该程序。注意,应有两个show()函数,每一个都使用默认参数。
请尽可能使用const参数。set()使用new分配足够的空间来存储指定的字符串。这里使用的技术与设计和实现类时使用的相似。
(可能还必须修改头文件的名称,删除using编译指令,这取决于所用的编译器)
*/
struct stringy {
char * str; // points to a string
int ct; // length of string (not counting '