第8周项目--string 类

来源:互联网 发布:833tt换什么域名了 编辑:程序博客网 时间:2024/06/03 21:39
/* *All rights reserved. *文件名称:main.cpp *作        者:姜 甜 甜 *完成日期:2015年4月28日 *版  本  号:v1.0 * *问题描述:请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。  提示:有指针成员,设计时要注意。这个,你懂的。*/
#include<iostream>#include<cstring>using namespace std;class String{public:    String();    String(String &a);    String(char *s1);    ~String();    String operator+(String &s);//s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。    String operator-(String &s);    void display();private:    char *p;   //指向存储的字符串    int len;   //记录字符串的长度};String::String(){    len=0;    p=0;}String::String(String &a){    len=a.len;    if(p!=NULL)       <span style="color:#ff0000;"> delete []p;      //当发生在赋值等情形时,原对象可能已经存在,需释放原有空间</span>    p = new char[len+1];    strcpy(p,a.p);}String::String(char *s1){    len=strlen(s1);    p=new char[len+1];//    strcpy(p,s1);}String String::operator+(String &s1){    String s;    s.len = len+s1.len;    s.p = new char[s.len+1];   //原误写char(s.len+1)    strcpy(s.p,p);    strcat(s.p,s1.p);    return s;}String String::operator-(String &s2){    String s;    //c1为截去尾部空格的字符串    char *c1=new char[len+1];    strcpy(c1,p);    int i=len-1;    while(i>=0&&c1[i]==' ') --i;    c1[i+1]='\0';    //c2为去除前导空格的字符串    char *c2=new char[s2.len+1];    strcpy(c2,s2.p);    i=0;    while(i<s2.len&&c2[i]==' ') ++i;    int j=0;    while(i<s2.len&&c2[i]!='\0')    {        c2[j]=c2[i];        ++i;        ++j;    }    c2[j]='\0';    //将这两部分接起来    s.len = strlen(c1)+strlen(c2);    s.p = new char[s.len+1];     //原误写char(s.len+1)    strcpy(s.p,c1);    strcat(s.p,c2);    delete c1;    delete c2;    return s;}String::~String(){   <span style="color:#ff0000;">if(!p) delete []p;</span>}void String::display(){    cout<<p;    cout<<endl;}int main(){    String string1(" Hello  "), string2(" World ");    string1.display();    string2.display();    String string3;    string3 = string1 + string2;    string3.display();    string3 = string1 - string2;    string3.display();    return 0;}


笔会:这一节的释放空间有些混乱,字符串的使用也有些搞不清,郁闷!

0 0