第12周项目4-String类的构造

原创 2016年06月01日 18:29:46

问题与代码

/* 
*copyright (t) 2016,烟台大学计算机学院 
*All rights reserved. 
*文件名称:test.cpp 
*作者:张晴晴 
*完成日期:2016年6月1日 
*版本号:v1.0 
*问题描述:
请构造String类的加、减运算。
其中,s1 + s2将两个字符串的连接起来;
s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
提示:有指针成员,设计时要注意。 
*输入描述: 
*程序输出: 
*/  
 


#include<iostream>
#include<Cstring>
using namespace std;
class String
{
public:
    String ();//默认构造函数
    String(const char *s);
    String(String &str);//构造函数
    ~String();
    void display();
    friend String operator +(String &s1,String &s2);
    friend String operator -(String &s1,String &s2);
private:
    char *p;//字符型指针用于指向字符串
    int len;
};
String::String()
{
    len=0;
    p=NULL;
}
    String::String(const char *s)
    {
        len=strlen(s);
        p=new char [len+1];
        strcpy(p,s);
    }
    String::String(String &str)
    {
        len=str.len;
        if(p!=NULL)//赋值时原对象可能存在所以要删除,释放原有空间
            delete []p;
        p=new char [len+1];
        strcpy(p,str.p);
    }
    String::~String()
    {
        if(!p)//当p内无储存的值时析构
        delete []p;
    }
    void String::display()//输出指向的字符串
    {
        cout<<p<<endl;//不是应该输出的是*p??
        //*p是指向字符串的指针,加上*p只会输出第一个字符不加会输出一串,就像打开一扇门,门后面的也就出来了。
    }
    String operator +(String &s1,String &s2)
    {
        String s;
        s.len=s1.len+s2.len;
        s.p=new char[s.len+1];
        //注意重新定义容量用的是[]
        strcpy(s.p,s1.p);
        strcat(s.p,s2.p);//下有补充
        return s;
    }
/*
    将两个char类型链接。
    char d="GoldenGlobal";
    char *s="View";
    strcat(d,s);
    结果放在d中
    printf("%s",d);
    输出 d 为 GoldenGlobalView (中间无空格)
    d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
    返回指向d的指针。
*/
   String operator -(String &s1,String &s2)
   {
       String s;
       //c1是截去尾部空格的字符串
       char *c1=new char [s1.len+1];
                                    //格式:strlen (字符数组名)
                                   //功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内
                                  //说明:返回s的长度,不包括结束符NULL。
       strcpy(c1,s1.p);
       int i=s1.len-1;//为什么要-1;
       while(i>=0&&c1[i]==' ')//这是删去第一个字符串后面多余的空格
        --i;
       c1[i+1]='\0';//c1结束


       char *c2=new char [s2.len+1];//c2是去除前导空格的字符串
       strcpy(c2,s2.p);
       i=0;
       while(i<s2.len&&c2[i]==' ')
        ++i;
       int j=0;
       while(i<s2.len&&c2[i]!='\0')//这步是删去c2前面的空格
       {
           c2[j]=c2[i];
           ++i;
           ++j;
       }
       c2[j]='\0';//c2结束


       //将这两部分接起来
       s.len=strlen(c1)+strlen(c2);
       s.p=new char[s.len+1];
       strcpy(s.p,c1);
       strcat(s.p,c2);
       delete c1;
       delete c2;
       return s;

   }
   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;

   }

题目要求:

运行结果:


学习心得:


这个问题好麻烦啊,代码理解很难,补充的知识点都写进代码了,但是还有一个疑问,第95行的问题现在还没人解答出来呢!!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

第12周项目4-string类的构造

/* Copyright(C) 2016,计算机与控制工程学院 *All rights reserved.*文件名:zhang.cpp* 作者:张志新 *完成日期:2016年5月30日 *版本号:v1...
  • hello_world8888
  • hello_world8888
  • 2016年05月30日 15:24
  • 109

第12周项目4-String类的构造

#include #include using namespace std; class String { public: String( ); ...
  • zhangzhangjiejie
  • zhangzhangjiejie
  • 2016年05月24日 14:20
  • 125

第7周项目4-string类的构造

/* *copyright (c)2015,烟台大学计算机学院 *All rights reserved *文件名称:project.cpp *作者:孙春红 *完成日期:...
  • yantaidaxuecjj
  • yantaidaxuecjj
  • 2015年05月13日 08:14
  • 95

第8周项目4-String类的构造

/*。 *Copyright(c)2014,烟台大学计算机学院 *All right reserved, *文件名:test.cpp *作者:毕玉堂 *完成日期:2015年5月7日 *版本号:v1.0...
  • biyutang
  • biyutang
  • 2015年05月07日 21:11
  • 178

第7周项目4-string类的构造

/* *copyright (c)2015,烟台大学计算机学院 *All rights reserved *文件名称:project.cpp *作者:孙春红 *完成日期:2015年5月3日 ...
  • yantaidaxuecjj
  • yantaidaxuecjj
  • 2015年05月13日 08:17
  • 88

第8周项目4-String类的构造

问题描述: 代码: 运行结果: 学习心得:
  • shope9
  • shope9
  • 2015年05月02日 12:50
  • 248

第8周项目4-String类的构造

#include #include using namespace std; class String { private: char *p; int len; public...
  • sinat_21382429
  • sinat_21382429
  • 2015年05月17日 20:54
  • 199

第十二周项目4-String类的构造

问题及代码: /* *Copyright(c) 2016.烟台大学计算机与控制工程学院 *ALL rights reserved. *文件名称:main.cpp *作者:郝昱猛 *完成日...
  • qq_33875089
  • qq_33875089
  • 2016年05月31日 19:06
  • 177

第八周 项目4-String类的构造

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:呼亚萍 ...
  • huyaping2014
  • huyaping2014
  • 2015年05月08日 18:05
  • 154

第八周项目4-String类的构造

写一个能处理字符串的类。 #include #include using namespace std; class String { public: String( ); ...
  • mayuko2012
  • mayuko2012
  • 2015年05月14日 20:13
  • 640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第12周项目4-String类的构造
举报原因:
原因补充:

(最多只允许输入30个字)