C++ 构造函数和析构函数题目 190

classCString{char*m_pbuff;//指向字符串的指针intm_length;//表示当前字符串的最大允许长度,也就是字符数组的长度public:CSt... class CString
{
char * m_pbuff; //指向字符串的指针
int m_length;//表示当前字符串的最大允许长度,也就是字符数组的长度
public:
CString(); //构造函数1,设置为空字符串,m_length=100
CString(char *src); //构造函数2,在考虑了src的长度后初始化当前对象,m_length>=src的长度+1
CString(char ch); //构造函数3,0号元素赋值为ch,m_length=100
int SetString(char *src); //设置字符串,在考虑了src的长度后设置当前对象,m_length>=src的长度+1
void trim();// 去除字符串最前和最后的空格
int find(char ch); //查找字符串中的指定字符的第一次出现位置,如果未出现返回-1
void toLower();//字符串转小写
void toUpper();//字符串转大写
void deletechar(char ch); // 删除其中的指定字符
void show();
};
请编写程序实现如下功能:
为其中的每个成员函数给出实现代码;
自行根据需要决定是否需要添加拷贝构造函数和析构函数;
main 函数要求如下,不允许修改:
void main()
{
CString s1;
s1,show();
s1.setString("abc1");
s1,show();
CString s2("abc2");
s2,show();
CString s3('a');
s3,show();
CString s4(s2);
s4,show();
//下面自行添加必要的测试函数
}

前半部分自己会了,但是对于后半部分却不知道怎么做,尤其是main函数中 s1,show()这种语句,希望大神能完成本题,并解答疑惑!
题目中打错了,不是逗号,是 .
求大神能完成此题
展开
 我来答
intehel
2015-05-24 · TA获得超过1292个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1748万
展开全部
class CString
{
private:
    char * m_pbuff; //指向字符串的指针
    int m_length;//表示当前字符串的最大允许长度,也就是字符数组的长度
public:
    ~CString();//析构
    CString(); //构造函数1,设置为空字符串,m_length=100
    CString(CString &);    //拷贝构造
    CString(char *src); //构造函数2,在考虑了src的长度后初始化当前对象,m_length>=src的长度+1
    CString(char ch); //构造函数3,0号元素赋值为ch,m_length=100
    int SetString(char *src); //设置字符串,在考虑了src的长度后设置当前对象,m_length>=src的长度+1
    void trim();//  去除字符串最前和最后的空格
    int find(char ch); //查找字符串中的指定字符的第一次出现位置,如果未出现返回-1
    void toLower();//字符串转小写
    void toUpper();//字符串转大写
    void deletechar(char ch); // 删除其中的指定字符
    void show();
private:
    void freeBuff();
};

void CString::freeBuff()
{
    if(m_pbuff != 0)
    {
        delete []m_pbuff;
        m_pbuff = 0;
    }
}

CString::CString()
{
    m_pbuff = new char[100];
    m_length = 100;
    m_pbuff[0] = 0;
}

CString::CString(CString &ref)
{
    if(ref.m_length > 0)
    {
        m_length = ref.m_length;
        m_pbuff = new char[m_length];
        memcpy(m_pbuff,ref.m_pbuff,m_length);
    }
    else
    {
        m_pbuff = 0;
        m_length = 0;
    }
}

CString::CString(char *src)
{
    m_length = src?strlen(src)+1:0;
    if(m_length == 0)
        m_pbuff = 0;
    else
    {
        m_pbuff = new char[m_length];
        memcpy(m_pbuff,src,m_length);
    }
}

CString::CString(char ch)
{
    m_length = 100;
    m_pbuff = new char[m_length];
    m_pbuff[0] = ch;
    m_pbuff[1] = 0;
}

int CString::SetString(char *src)
{
    freeBuff();
    
    m_length = src?strlen(src)+1:0;
    if(m_length == 0)
        m_pbuff = 0;
    else
    {
        m_pbuff = new char[m_length];
        memcpy(m_pbuff,src,m_length);
    }
}

void CString::trim()
{
    int i,j=m_length;
    for(i=0;i<m_length;++i)
    {
        if(m_pbuff[i] != ' ' || m_pbuff[i] == 0)
            break;
    }
    
    //跳过\0字符后面的所有字符
    while(m_pbuff[--j] != 0);
    
    while(j>0 && m_pbuff[j-1] == ' ')
        --j;
    m_pbuff[j] = 0;
    
    m_length = j-i;
    if(m_length == 0)
        freeBuff();
    else
    {
        m_length += 1;
        char *p = new char[m_length];
        memcpy(p,m_pbuff+i,m_length);
        
        freeBuff();
        m_pbuff = p;
    }
}

int CString::find(char ch)
{
    for(int i=0;i<m_length;++i)
    {
        if(m_pbuff[i] == 0)
            return -1;
        if(m_pbuff[i] == ch)
            return i;
    }
    
    return -1;
}

void CString::toLower()
{
    for(int i=0;i<m_length && m_pbuff[i] != 0;++i)
    {
        if(m_pbuff[i] >= 'A' && m_pbuff[i] <= 'Z')
            m_pbuff += 32;
    }
}

void CString::toUpper()
{
    for(int i=0;i<m_length && m_pbuff[i] != 0;++i)
    {
        if(m_pbuff[i] >= 'a' && m_pbuff[i] <= 'z')
            m_pbuff -= 32;
    }
}

void CString::deletechar(char ch)
{
    if(m_length == 0)
        return;
    
    char *p = new char[m_length];
    for(int i=0,j=0;i<m_length && m_pbuff[i] != 0;++i)
    {
        if(m_pbuff[i] != ch)
            p[j++] = m_pbuff[i];
    }
    
    p[j] = 0;
    freeBuff();
    m_pbuff = p;
}

void CString::show()
{
    if(m_length > 0 && m_pbuff[0] != 0)
        printf(m_pbuff);
}

以上代码均为NOTEPAD++手敲,请自行测试。

扈怀炜4h
2015-05-24 · TA获得超过6038个赞
知道大有可为答主
回答量:6907
采纳率:67%
帮助的人:1303万
展开全部
不简单呀,标记一下,用电脑写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式