【id:51】【20分】C. 电话号码升位(拷贝构造函数)

题目描述

定义一个电话号码类CTelNumber,包含1个字符指针数据成员,以及构造、析构、打印及拷贝构造函数。

字符指针是用于动态创建一个字符数组,然后保存外来输入的电话号码

构造函数的功能是为对象设置键盘输入的7位电话号码,

拷贝构造函数的功能是用原来7位号码的对象升位为8位号码对象,也就是说拷贝构造的对象是源对象的升级.电话升位的规则是原2、3、4开头的电话号码前面加8,原5、6、7、8开头的前面加2。

注意:电话号码只能全部是数字字符,且与上述情况不符的输入均为非法)

输入

测试数据的组数 t

第一个7位号码

第二个7位号码

......

输出

第一个号码升位后的号码

第二个号码升位后的号码

......

如果号码升级不成功,则输出报错信息,具体看示例


输入样例

3
6545889
3335656
565655


输出样例

26545889
83335656
Illegal phone number


【id:51】【20分】C. 电话号码升位(拷贝构造函数)_第1张图片 

 

#include
#include
using namespace std;

class CTelNumber
{
private:
	char* p;
public:
	CTelNumber(char* point);  //构造函数
	~CTelNumber();   //析构函数
	CTelNumber(const CTelNumber& a);//拷贝构造函数
};


//构造函数
CTelNumber::CTelNumber(char* point)//传入一个数组
{
	p = new char[8];//动态创建数组
	//进行数组的拷贝
	for (int i = 0; i < 8; i++)
	{
		p[i] = point[i];
	}

}


//析构函数
CTelNumber::~CTelNumber()
{
	delete[]p;//删除数组
}

//拷贝构造函数
CTelNumber::CTelNumber(const CTelNumber& a)//传入了一个对象的地址
{
	p = new char[9]; //加多一位
	//首字符为234的情况
	if (a.p[0] == '2' || a.p[0] == '3' || a.p[0] == '4')  //判断情况
	{
		p[0] = '8';  //首位为8,其余的拷贝
		int k = 0;
		for (int i = 1; i < 9; i++, k++)
		{
			p[i] = a.p[k];   //拷贝操作
		}
	}
	//首字符为5678的情况
	else if (a.p[0] == '5' || a.p[0] == '6' || a.p[0] == '7' || a.p[0] == '8')  //同上
	{
		p[0] = '2';
		int k = 0;
		for (int i = 1; i < 9; i++, k++)
		{
			p[i] = a.p[k];
		}
	}
	//输出赋值完的电话号码
	cout << p << endl;
}

//判断号码是否合法
int isDigtal(char* p)
{
	int num = 0;
	if (p[0] < '2' || p[0]> '8')  //判断不能升级的号码
	{
		return 0;
	}

	for (int i = 0; p[i] != '\0' && p[i] >= '0' && p[i] <= '9'; i++)//判断字符是否为数字
	{
		num++;
	}
	if (num == 7)//判断数字的个数
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		//创建一个数组p 来存储每次的号码
		char p[8];  //7个数字+'\0'共8个字符
		cin >> p;//注意像这样直接输入编译器会自动帮我们在后面补上'\0'
		if (isDigtal(p))//判断号码是否合法
		{
			CTelNumber old(p);//构造一个对象
			CTelNumber newtel(old);//拷贝构造

		}
		else
		{
			cout << "Illegal phone number" << endl;
		}
	}

	//system("pause");
	return 0;
}

你可能感兴趣的:(oj,c++,c++,开发语言)