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

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

你可能感兴趣的:(C++学习)