问题及代码:
/*
*Copyright (c)2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:project.cpp
*作 者:陈文青
*完成日期:2015年5月9日
*版 本 号:v1.0
*
*问题描述:写一个能处理字符串的类,
请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
提示:有指针成员,设计时要注意。这个,你懂的。*程序输入:
*程序输出:
*/
#include <iostream>
#include <cstring>
using namespace std;
class String
{
private:
char *p; //指向存储的字符串
int len; //记录字符串的长度
public:
String (); //构造函数,初始化用
String (char *str);
~String();
friend String operator+(String &s1,String &s2);
friend String operator-(String &s1,String &s2);
void display();
};
String::String ()
{
p=NULL;
len=0;
}
String::String (char *str)
{
len=strlen(str);
p=new char[len+1];
strcpy(p,str);
}
String::~String()
{
if(!p) delete []p;//如果p有构建的动态数组,要记得delete
}
String operator+( String &s1,String &s2)
{
String s;
s.p=new char[s1.len+s2.len+1];
strcpy(s.p,s1.p);
strcat(s.p,s2.p);
return s;
}
String operator-( String &s1,String &s2)
{
String s;
int l1=0,l2=0;
//去除s1的尾部空格
for(int i=s1.len-1; s1.p[i]==' '; --i)
{
++l1;
s1.p[i]='\0';
}
//去除s2的前导空格
for(int i=0; s2.p[i]==' ' ; ++i)
++l2;
for(int i=0; i<=s2.len-l2; ++i)
s2.p[i]=s2.p[i+l2];
s=s1+s2;
return s;
}
void String::display()
{
cout<<p<<endl;
}
int main()
{
String s1(" Hello "),s2(" world! "),s3;
cout<<"s1:";
s1.display();
cout<<"s2:";
s2.display();
cout<<"s1+s2:";
s3=s1+s2;
s3.display();
cout<<"s1-s2:";
s3=s1-s2;
s3.display();
return 0;
}
运行结果:
知识点总结:
String类的构造
学习心得:
1.有new就有delete
2.充分利用好类的构造函数,析构函数的作用
3.字符串最后一个存储空间是“\0”
4.充分利用cstring提供的函数
strlen()统计长度 strcpy()复制字符串 strcat()字符串相加