第7周-项目4-String类的构造-构造String类的加、减运算

来源:互联网 发布:全职美工招聘 编辑:程序博客网 时间:2024/05/22 03:52
问题及代码:
/*   *Copyright (c)2015,烟台大学计算机与控制工程学院   *All rights reserved.   *文件名称:String.cpp   *作    者:单昕昕   *完成日期:2015年4月26日   *版 本 号:v1.0   *问题描述:请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。*程序输入:无。*程序输出:字符串。*/ #include<iostream>#include<cstring>using namespace std;class String{public:    String();    ~String();//析构函数    String(const char *s);    String(String &str);    friend String operator+(String &s1,String &s2);//s1 + s2将两个字符串的连接起来    friend String operator-(String &s1,String &s2);//s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接    void display();private:    char *p;    int len;};String::String( )//默认构造函数{    len=0;    p=NULL;}String::~String(){    if(!p)        delete []p;}String::String(const char *s){    len=strlen(s);    p=new char[len+1];    strcpy(p,s);}String::String(String &str){    len=str.len;    p=new char[len+1];    strcpy(p,str.p);}String operator+(String &s1,String &s2)//直接把两个字符串连结到一起{    String s;    s.p=new char[s1.len+s2.len+1];//不计第一个字符串的结束符    strcpy(s.p,s1.p);//先复制s1    //下面这里可以用strcat连接函数,例如strcat(s1,s2),会先去掉s1的结束符后再把s2接连到s1末尾    int i;    for(i=0; i<s2.len+1; i++)        s.p[s1.len+i]=s2.p[i];    return s;}String operator-(String &s1,String &s2)//要先去除s1的尾部空格和s2的前导空格{    String s;    int i,count1=0,count2=0;//去除s1的尾部空格    for(i=s1.len-1; s1.p[i]==' '; i--)    {        count1++;        s1.p[i]='\0';    }    for(i=0; s2.p[i]==' '; i++)         count2++;    for(i=0; i<s2.len-count2; i++) //覆盖去除s2的前导空格    {        s2.p[i]=s2.p[i+1];    }    //cout<<count1<<" "<<count2<<endl;    //cout<<s1.len<<" "<<s2.len<<endl;    cout<<"观察空格去除情况:"<<endl;    cout<<"/"<<s1.p<<"/"<<endl;    cout<<"/"<<s2.p<<"/"<<endl;    s.p=new char[s1.len+s2.len+1-count1-count2];    strcpy(s.p,s1.p);    strcat(s.p,s2.p);    return s;}void String::display(){    cout<<p<<endl;}//下面定义用于测试的main()函数int main(){    String s1(" Attack on   "), s2(" Titan ");    s1.display();    s2.display();    String s;    s=s1+s2;    cout<<"s1+s2:";    s.display();    s=s1-s2;    cout<<"s1-s2:";    s.display();    return 0;}



运行结果:



知识点总结:
构造String类的加、减运算。

学习心得:

如果使用strcat函数会比用for语句连接字符串方便很多。

去除空格的时候要考虑到可能不止一个空格,所以我把空格数都用变量记录下来了。

这个程序老师木有给函数,什么都得自己想自己定义,感觉这个才是写这个程序我面临的最大挑战。

0 0
原创粉丝点击