题目描述
定义一个电话号码类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<iostream>
#include<cstring>
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;
}
}
}