第八周--运算符重载-String类的构造

来源:互联网 发布:linux中搭建ftp服务器 编辑:程序博客网 时间:2024/06/06 15:35
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:刘畅 * 完成日期:2015 年 4  月  27 日 * 版 本 号:v1.0 * * 问题描述:写一个能处理字符串的类。            请构造String类的加、减运算。            其中,s1 + s2将两个字符串的连接起来;            s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接 * 输入描述: ;* 程序输出: 按要求输出。

代码如下:

#include <iostream>#include <cstring>using namespace std;class String{public:    String()    {        p=NULL;        len=0;    }    String (const char *c);    String (const String &s);    void display();    ~String();    friend String operator+(String &s1,String &s2);    friend String operator-(String &s1,String &s2);private:    char *p;    int len;};String::String(const char *c){    len=strlen(c);    p=new char[len+1];    strcpy(p,c);}String::String(const String &s){    len=s.len;    if (p!=NULL)        delete []p;    p = new char[len+1];    strcpy(p,s.p);}void String::display(){    cout<<p<<endl;}String::~String(){    if (!p)        delete []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;}String operator-(String &s1,String &s2){    String s;    s.len=s1.len+s2.len-2;    s.p=new char[s.len+1];    strcpy(s.p,s1.p);    int i=s1.len-1;    while(i>=0&&s.p[i]==' ') --i;    s.p[i+1]='\0';    i=0;    while(i<s2.len&&s2.p[i]==' ') ++i;    int j=0;    while(i<s2.len&&s2.p[i]!='\0')    {        s2.p[j]=s2.p[i];        ++i;        ++j;    }    s2.p[j+1]='\0';    strcat(s.p,s2.p);    return s;}int main(){    String s1(" NOT "),s2(" AFRAID! "),s3;    s1.display();    s2.display();    s3=s1+s2;    s3.display();    s3=s1-s2;    s3.display();}


运行结果:

 

学习心得:

这次虽然是看过了贺老的博客后再自己写的,虽然很多地方相同,但是保证不再是抄之无道了,理解了题目的意思,掌握了用法。

发现自己没有老师的架构真的不知道如何去写类和main函数内的内容。

0 0
原创粉丝点击