/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:田成琳
*完成日期:2014 年 4 月 16 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述:无
*问题描述:在String类中增加一个数据成员len表示字符串中字符个数,
然后再构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;
s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
*程序输出:- -
*问题分析:
*算法设计:
*/
#include<iostream>
#include<cstring>
using namespace std;
class String
{
public:
String();
String(char *);
~String();
String operator + (String &str);
String operator - (String &str);
void output();
private:
int len;
char *str;
};
String::String()
{
len=0;
str=NULL;
}
String::String(char *s)
{
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
}
String::~String()
{
if(!str)
delete str;
}
String String::operator + (String &t)
{
String s;
s.len=len+t.len;
s.str=new char[t.len+1];
strcpy(s.str,str);
strcat(s.str,t.str);
return s;
}
String String::operator - (String &t)
{
int i,j=0,k=0;
String s;
i=len-1;
while(i>=0&&str[i]==' ')
{
i++;
str[i+1]='\0';
}
char *p=new char[t.len+1];
strcpy(p,t.str);
while(j<t.len&&p[j]==' ')
j++;
while(j<t.len&&p[j]!='\0')
{
p[k]=p[j];
k++;
j++;
}
p[k]='\0';
s.len=len+t.len;
s.str=new char[s.len+1];
strcpy(s.str,str);
strcat(s.str,p);
delete p;
return s;
}
void String::output()
{
cout<<str<<endl;
}
int main()
{
String a("I am "),b(" T C L"),c;
a.output();
b.output();
c=a+b;
c.output();
c=a-b;
c.output();
return 0;
}
运行结果:
心得体会:不小心给删了,,,又重发一遍。。。