07-B. 电话号码升位(拷贝构造函数)

本文介绍了如何定义CTelNumber类,包括构造函数用于输入7位电话号码,拷贝构造函数实现电话号码从7位到8位的升级,同时处理非法输入。通过实例展示了如何使用并检查电话号码的合法性。

07-拷贝构造函数与复合类

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

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

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

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

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

输入
测试数据的组数

第一个7位号码

第二个7位号码




输出
第一个号码升位后的号码

第二个号码升位后的号码



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

输入样例
3
6545889
3335656
565655

26545889
83335656
Illegal phone number

#include<iostream>
#include<cstring>
using namespace std;

class Cphone
{
    char *num;
    public:
        Cphone()//初始化构造
        {
            *num={0};
        }
        
        Cphone(char *n)//构造
        {
            num=new char[strlen(n)+1];
            strcpy(num,n);
        }
        
        Cphone(Cphone &ph)//拷贝构造
        {
            int i,len=strlen(ph.num);
            num=new char[strlen(ph.num)+1];
            strcpy(num,ph.num);
            if(num[0]=='2'||num[0]=='3'||num[0]=='4')
            {
                for(i=len-1;i>=0;i--)
                    num[i+1]=num[i];
                num[0]='8';
            }
            else if(num[0]=='5'||num[0]=='6'||num[0]=='7'||num[0]=='8')
            {
                for(i=len-1;i>=0;i--)
                    num[i+1]=num[i];
                num[0]='2';
            }
            num[strlen(ph.num)+1]='\0';
        }
        
        void print()//输出
        {
            int i,len=strlen(num);
            for(i=0;i<len;i++)
                cout<<num[i];
            cout<<endl;
        }
        ~Cphone()//析构
        {
            delete[]num;
        }
};

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        string n;
        cin>>n;
        int len=n.length(),i=0,sum=0;
        char *n1=new char(len);
        
        for(i=0;i<len;i++)//检测非法输入
        {
            if(n[i]<'2'||n[i]>'9')
            sum++;
        }
        if(len!=7||n[0]=='9')
        sum++;
        if(sum!=0)
            cout<<"Illegal phone number"<<endl;
        
        else//合法
        {
            for(i=0;i<len;i++)
                n1[i]=n[i];
            Cphone ph(n1);
            Cphone ph1(ph);
            ph1.print();
            delete n1;
        }
        
    }
    return 0;
}

述 设计一个电话用户类(Usetele),数据成员为:用户编号id(int),电话号码number(long int,七位,首位不为0和1),用户类型utype(A-公用;B-私用)。成员函数为:构造函数(初始化信息)Usetele(),修改信息modify(),打印信息list()电话号码升位处理expand。已有主函数代码如下: int main(){ Usetele a,b(3,3792345,'A'); Usetele c(b),d(21,4466223,'B'),e(d); a.list(); a.modify(6,8804455,'A'); a.list(); a.Expand(); d.Expand(); a.list(); d.list(); } 具体要求: 基于输出结果,在类体外实现相应构造函数,并显示构造过程; 在类体外实现成员函数list(),依次输出电话用户信息; 在类体外实现成员函数modify(),依次修改电话用户信息; 在类体外实现成员函数Expand(),实现电话号码升位升位原则如下:若号码位数大于7位,则不需要进行升位处理;否则,查看号码左边最高位数字:若用户类型为公用电话,且最高位号码位于2-5,则最高位补8;若用户类型为公用电话,且最高位号码位于6-9,则最高位补7;若用户类型为私人电话,且最高位号码位于2-5,则最高位补6;若用户类型为公用电话,且最高位号码位于6-9,则最高位补5. 输入 NULL 输出 Non-parameter constructor called! Constructor called! Copy constructor called! Constructor called! Copy constructor called! ID:0 Tele:0 Type:A 6Information modified! ID:6 Tele:8804455 Type:A Tele:8804455The new tele is:78804455 Tele:4466223The new tele is:64466223 ID:6 Tele:78804455 Type:A ID:21 Tele:64466223 Type:B 样例输入 NULL 样例输出 Non-parameter constructor called! Constructor called! Copy constructor called! Constructor called! Copy constructor called! ID:0 Tele:0 Type:A 6Information modified! ID:6 Tele:8804455 Type:A Tele:8804455The new tele is:78804455 Tele:4466223The new tele is:64466223 ID:6 Tele:78804455 Type:A ID:21 Tele:64466223 Type:B
03-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值