C++Primer第五版 第六章函数习题(10-20)

11.编写验证自己的reset函数 使其作用于引用类型的参数

知识点1:使用引用形参跟使用指针形参一样,可以改变实参的值。

知识点2:使用引用的好处 避免在形参初始化的时候进行拷贝。

知识点3:当函数有多个返回值时,可以使用引用形参返回这个值

#include "stdafx.h"
#include <iostream>
#include <string>											//C++中输入输出string类型变量
using namespace std;



//测试引用传参
int reset(string &MyString,char c,int &val)
{
	bool MyBool = true;										//局部变量
	int FirstPosition =0;									//局部变量 定义第一个位置

	for (int i = 0; i < MyString.size();i++)				
	{
		if (MyString[i] == c)
		{
			if (MyBool)
			{
				FirstPosition = i;
				MyBool = false;
			}
			
			val++;											//隐私返回指定字符出现的个数
		}
		
	}
	return FirstPosition+1;									//返回指定字符第一次出现的位置
	
}


int _tmain(int argc, _TCHAR* argv[])
{
	cout << "请输入字符串";
	string MyString;
	cin >> MyString;

	cout << "请输入目标字符";
	char MyChar;
	cin >> MyChar;

	int MyVal=0;
	int Pos = reset(MyString,MyChar,MyVal);
	cout << "目标字符第一次出现的位置是:"<<Pos << endl;
	cout << "目标字符出现的次数为:" << MyVal << endl;

	return 0;
}

12.用引用传参交换两个值

#include "stdafx.h"
#include <iostream>
using namespace std;

void fact(int &a,int &b)                         //引用形参可以改变实参的值
{
	int c = a;
	a = b;
	b = c;

}


int _tmain(int argc, _TCHAR* argv[])
{
	int i = 5;
	int j = 9;
	fact(i, j);
	printf("i是%d,j是%d", i, j);                  //输出结果正好相反
	
	return 0;
}

引用传参的方式更好一些 知识点有讲

13.

前者以传值方式传入参数,不能修改实参。后者是引用传参,以传址的方式传入参数,可以修改实参。

14.举一个形参可以是引用类型的例子,再举一个形参不能是引用类型的例子。

简单的说,如果实参需要修改,则应是引用类型。

15.

常量引用的作用 :既不想进行拷贝 又不想对实参进行更改

普通引用:不对实参进行拷贝 可以对实参进行更改

16.指出下列函数的局限性并改善。

字符串在函数中无需修改 加入const 表示常量引用

17.编写一个函数判断string对象是否含有大写字母,编写另一个函数 把string对象全都改写成小写。 形参类型相同么 为什么?

判断是否有大写字母函数

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

//判断是否有大写字母
bool faction1(string const &MyString)		//不需要改变实参
{
	for (int i = 0; i < MyString.size();i++)
	{
		if (MyString[i] >= 'A' && MyString[i] <= 'Z')
		{
			return true;
		}
		else
		{
			return false;
		}
	}

}





int _tmain(int argc, _TCHAR* argv[])
{
	cout << "请输入字符串" << endl;
	string MyString;
	cin >> MyString;

	if (faction1(MyString))
	{
		cout << "含有大写字符" << endl;
	}
	else
	{
		cout << "不含有大写字符串" << endl;
	}


	return 0;
}

将大写字母改写成小写函数

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

//大写字母改变小写字母
void faction1(string  &MyString)		//需要改变实参
{
	for (int i = 0; i < MyString.size(); i++)
	{
		if (MyString[i] >= 'A' && MyString[i] <= 'Z')
		{
			MyString[i] = MyString[i] + 32;
			
		}

	}

}

int _tmain(int argc, _TCHAR* argv[])
{
	cout << "请输入字符串" << endl;
	string MyString;
	cin >> MyString;
	faction1(MyString);
		
	cout << "改变之后是" << MyString<<endl;
	

	return 0;
}

18.为函数编写函数声明 推测函数具备的功能

(a)

//题目没有说的很清楚 const最好加上把
bool compare(matrix const &m1,matrix const &m2){/.../}

(b)

vector<int>::iterator change_val (int a,vector<int>::iterator b){/.../}

19.判断调用合法与不合法

(a)不合法

(b)合法

(c)合法

(d)合法

20.什么时候应该是常量引用 ?常量引用改为普通引用 会发生什么情况?

一般情况 不需要改变实参的情况下最好都用const

有可能导致不必要的错误 比如改变实参

原创文章 4 获赞 2 访问量 420

猜你喜欢

转载自blog.csdn.net/Jabez_Lee/article/details/81384464