C++第8周项目5 - 扩充String类
来源:互联网 发布:收售淘宝店铺 编辑:程序博客网 时间:2024/06/05 06:41
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8806111
【项目5-扩充String类】在P324基础上,在String类中增加一个数据成员len表示字符串中字符个数,然后构造String类的相关运算。这些运算可以包括:s1 + s2用于两个字符串的连接;s1 - s2用于将s1的尾部空格和s2的前导空格去除后的连接;s1*n的结果为将s1中的字符重复n次;s1/s2表示在s1中删除所有与s2相同的子串。这些运算本身并无统一的规范,多想一些字符串上的操作,利用运算符的重载实现之。
参考解答:
#include <iostream>#include <Cstring>using namespace std;/*在P324基础上,在String类中增加一个数据成员len表示字符串中字符个数, 然后构造String类的相关运算。这些运算可以包括: s1 + s2用于两个字符串的连接; s1 - s2用于将s1的尾部空格和s2的前导空格去除后的连接; s1*n的结果为将s1中的字符重复n次; s1/s2表示在s1中删除所有与s2相同的子串。 这些运算本身并无统一的规范,多想一些字符串上的操作,利用运算符的重载实现之。*/class String{public: String( ); //默认构造函数 String(const char *s); String(String &str); //构造函数 ~String(); void display( ); friend String operator + (String &s1,String &s2 ); friend String operator - (String &s1,String &s2 ); friend String operator * (String &s1,int n ); //未实现,先发出来了 friend String operator / (String &s1,String &s2 );//未实现,先发出来了private: char *p; int len; //字符型指针,用于指向字符串};String::String(){ len = 0; p = NULL;}String::String(const char *s){ len = strlen(s); p = new char[len+1]; strcpy(p,s);}String::String(String &str){ len = str.len; p = new char[len+1]; strcpy(p,str.p);}String::~String(){ if(!p) delete []p;}void String::display( ) //输出p所指向的字符串{ cout<<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; //c1为截去尾部空格的字符串 char *c1=new char[s1.len+1]; strcpy(c1,s1.p); int i=s1.len-1; while(i>=0&&c1[i]==' ') --i; c1[i+1]='\0'; //c2为去除前导空格的字符串 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+1]='\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;}int main( ){ String string1(" Hello "),string2(" World "); string1.display(); cout<<endl; String string3; string3 = string1 + string2; string3.display(); return 0;}
- C++第8周项目5 - 扩充String类
- C++第8周(春)项目4 扩充String类
- 第8周项目四扩充string 类
- 【项目5-扩充String类】
- 第八周项目4-扩充String类
- 第八周项目4扩充string类
- 【项目4-扩充String类】
- 第八周项目五----string类的扩充
- 第5周项目2 游戏中角色类(扩充函数)
- 第8周项目--string 类
- 第8周项目4-string类
- 扩充string类
- 扩充String类
- 扩充String类
- 扩充String类
- 第8周项目1(3)—扩充运算符功能
- 【项目3 - 时间类】阅读、运行程序后,按要求扩充类的功能 第2周项目
- 第8周项目4 String类的构造
- Android学习笔记(1)—— Android架构剖析
- 1126 水仙花数
- oracle 10g rman 备份与恢复 之一
- 什么是编译器
- 【Spring】 Spring 框架名字的由来
- C++第8周项目5 - 扩充String类
- git学习笔记-如何移除或忽略(ignore)已经提交给git管理的文件
- strlen的各种实现
- 函数
- 二维数组定义及动态分配
- Myeclipse中web project 与java project区别
- android ndk 开发之Application.mk
- (下载、打开)从服务器端将文件传送到客户端
- linux c 获取系统时间