2-8-4 String类的构造

来源:互联网 发布:国泰安数据库是什么 编辑:程序博客网 时间:2024/06/05 03:27

问题及代码:

#include <iostream>#include <string.h>using namespace std;class String{public:    String():len(0)    {        p=new char;    };    String(char *s);//需要的成员函数(若需要的话,声明友元函数)    String(char *s,int l);    String operator+(String &s);    String operator-(String &s0);private:    char *p;   //指向存储的字符串    int len;   //记录字符串的长度};String::String(char *s){    len=strlen(s);    p=new char[len+1];    strcpy(p,s);}String::String(char *s,int l){    len=l;    p=new char[len+1];    strcpy(p,s);}String String::operator+(String &s){    String s0;    s0.len=len+s.len;    s0.p=new char[s0.len+1];    strcpy(s0.p,p);    strcat(s0.p,s.p);    return s0;}String String::operator-(String &s0){    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[s0.len+1];    strcpy(c2,s0.p);    i=0;    while(i<s0.len&&c2[i]==' ') ++i;    int j=0;    while(i<s0.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;}int main(){    char a[]="S510";    char b[]="DaGe";    String s1(a),s2(b,4),s3;    s3=s1+s2;    char c[]="  Chi";    char d[]="na      ";    String s4(d),s5(c),s6;    s6=s4-s5;    return 0;}



学习小结:

额,第八周的项目现在才完成哈。

有点羞涩,哈哈。

今天在机房构造加法重载费了我好大力,还好写出来的和贺老的一样,因为在减法那个实在想不出来了,就看了一下下。

好,开始做第九周的!


0 0
原创粉丝点击