朝鲜世界杯_2019篮球世界杯 - dyldrk.com

电话号码升位(拷贝构造函数)

题目描述 定义一个电话号码类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

#include

#include

using namespace std;

class CTelNumber {

protected:

char* cp;

public:

CTelNumber(const char* number);

~CTelNumber();

void print();

CTelNumber(const CTelNumber&);

};

CTelNumber::CTelNumber(const char* number) {

cp = new char[strlen(number) + 1];

strcpy(cp, number);

}

CTelNumber::~CTelNumber() {

delete[] cp;

}

void CTelNumber::print() {

cout << cp << endl;

}

CTelNumber::CTelNumber(const CTelNumber& ctn) {

cp = new char[strlen(ctn.cp) + 2];

if (ctn.cp[0] >= '2' || ctn.cp[0] <= '4')

cp[0] = '8';

else if (ctn.cp[0] >= '5' || ctn.cp[0] <= '8')

cp[0] = '2';

strcpy(cp + 1, ctn.cp);

}

int judge(char* num) {

if (strlen(num) != 7)

return 0;

int i = 0;

if (num[i] < '2' || num[i] > '8')

return 0;

++i;

while (num[i] != '\0') {

if (num[i] < '0' || num[i] > '9')

return 0;

++i;

}

return 1;

}

int main()

{

int T;

cin >> T;

while (T--)

{

char telnumber[10];

cin >> telnumber;

if (judge(telnumber)) {

CTelNumber ct1(telnumber);

CTelNumber ct2(ct1);

ct2.print();

}

else {

cout << "Illegal phone number" << endl;

}

}

}