/*
*Copyright (c) 2014, 烟台大学计算机学院
*All rights reserved.
*文件名称:week8-4.cpp
*作者:高赞
*完成日期:2015年 4 月 27 日
*版本号:v1.0
*
* 问题描述:构造String类的加、减运算。
* 其中,s1 + s2将两个字符串的连接起来;
* s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
*/
#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
String();
String(const char *);
String operator+(const String &);
String operator-(const String &);
void display();
private:
char *p; //指向存储的字符串
int len; //记录字符串的长度
};
String::String()
{
p=NULL;
len=0;
}
String::String(const char *a)
{
len=strlen(a);
p=new char[len+1];
strcpy(p,a);
}
String String::operator+(const String &s2)
{
String s;
s.len=this->len+s2.len;
s.p=new char[s.len+1];
strcpy(s.p,this->p);
strcat(s.p,s2.p);
return s;
}
String String::operator-(const String &s2)
{
String s;
char *c1=new char[this->len+1];
strcpy(c1,this->p);
int i=this->len-1;
while(i>=0&&c1[i]==' ') --i; //删除尾部空格
c1[i+1]='\0';
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];
strcpy(s.p,c1);
strcat(s.p,c2);
delete c1;
delete c2;
return s;
}
void String::display()
{
cout<<p<<endl;
}
int main()
{
String s1("ABCDEFG "),s2(" HIJKLMN"),s3;
s3=s1+s2;
cout<<"s1+s2=";
s3.display();
s3=s1-s2;
cout<<"s1-s2=";
s3.display();
return 0;
}
strcat 函数
原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。