扩充String类

/*
* 程序的版权和版本声明部分
* Copyright (c)2014, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:扩充String类
* 作    者:孔云
* 完成日期:2014年4月27日
* 版 本 号: v1.0
* 输入描述:主函数中给出。
* 问题描述:构造String类的加减运算、将两个字符串相加减,字符串相加表示两个字符串连接起来,相减表示前者的尾部空格和后者的前导空格去除后的连接。
* 输出描述:加减运算后的字符串。
*/
#include <iostream>
#include <Cstring>
using namespace std;
class String
{
public:
    String()
    {
        len=0;
        p=NULL;//指针赋值为0即空指针
    }
    String(String &str);
    String friend operator+(String &s1,String & s2);
    String friend operator-(String &s1,String & s2);
    String(const char *d);
    void display()
    {
        cout<<p<<endl;
    }
    ~String();
private:
    int len;
    char *p;
};
String::~String()
{
    if(!p) delete []p;
}
String::String(String &str)
{
    len=str.len;
    if(p!=NULL) delete[]p;
    p=new char[len+1];
    strcpy(p,str.p);
}
String operator+(String &s1,String & s2)
{
    String st;
    st.len=s1.len+s2.len;
    st.p=new char[st.len+1];
    strcpy(st.p,s1.p);
    strcat(st.p,s2.p);
    return st;
}
String operator-(String &s1,String & s2)
{
    String s;
    int j;
    char *a=new char[s1.len+1];
    strcpy(a,s1.p);
    int i=s1.len-1;
    while(i>=0&&a[i]==' ')--i;
    a[i+1]='\0';
    char *b=new char[s2.len+1];
    strcpy(b,s2.p);
    i=0;
    while(i<s2.len&&b[i]==' ')++i;
    j=0;
    while(i<s2.len&&b[i]!='\0')
    {
        b[j]=b[i];
        ++i;
        ++j;
    }
    b[j]='\0';
    s.len=strlen(a)+strlen(b);
    s.p=new char[s.len+1];
    strcpy(s.p,a);
    strcat(s.p,b);
    delete a;
    delete b;
    return s;
}
String::String(const char *d)
{
    len=strlen(d);
    p=new char[len+1];
    strcpy(p,d);
}
int main()
{
    String t1("It's    "),t2("  nice very much!"),t3;
    t1.display();
    t2.display();
    t3=t1+t2;
    t3.display();
    t3=t1-t2;
    t3.display();
    return 0;

}


心得体会:一字母之差,坏我大局!做事马虎不得,学习更要认真啊奋斗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值