1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 class String{
5 public:
6 //默认构造函数
7 String(const char* str=NULL);
8 //复制构造函数
9 String(const String &str);
10 //析构函数
11 ~String();
12 //字符串连接
13 String operator+(const String & str);
14 //字符串赋值
15 String & operator=(const String & str);
16 //字符串赋值
17 String & operator=(const char* str);
18 //判断字符串是否相等
19 bool operator==(const String & str);
20 //获取字符串长度
21 int length();
22 //求子字符串[start,start+-1]
23 String substr(int start,int n);
24 //重载输出
25 friend ostream & operator<<(ostream & o,const String & str);
26 private:
27 char * data;
28 int size;
29 };
30 //构造函数
31 String::String(const char *str){
32 if(str==NULL){
33 data=new char[1];
34 data[0]='\0';
35 size=0;
36 }else{
37 size=strlen(str);
38 data=new char[size+1];
39 strcpy(data,str);
40 }
41 cout<<str<<"构造"<<endl;
42 }
43 //复制构造函数
44 String::String(const String & str){
45 size=str.size;
46 data=new char[size+1];
47 cout<<str<<"拷贝"<<endl;
48 strcpy(data,str.data);
49 }
50 //析构函数
51 String::~String(){
52 delete[] data;
53 }
54 //字符串连接
55 String String::operator+(const String & str){
56 String newStr;
57 //释放原有空间
58 delete[] newStr.data;
59 newStr.size=size+str.size;
60 newStr.data=new char[newStr.size+1];
61 strcpy(newStr.data,data);
62 strcpy(newStr.data+size,str.data);
63 return newStr;
64 }
65 //字符串赋值
66 String & String::operator=(const String &str){
67 if(data==str.data){
68 return *this;
69 }
70 delete[] data;
71 size=str.size;
72 data=new char[size+1];
73 strcpy(data,str.data);
74 cout<<str<<"赋值"<<endl;
75 return *this;
76 }
77 //字符串赋值
78 String & String::operator=(const char* str){
79 if(data==str){
80 return *this;
81 }
82 delete[] data;
83 size=strlen(str);
84 data=new char[size+1];
85 strcpy(data,str);
86 cout<<str<<"赋值"<<endl;
87 return *this;
88 }
89 //判断是否字符串相等
90 bool String::operator==(const String &str){
91 return strcmp(data,str.data)==0;
92 }
93 //获取字符串长度
94 int String::length(){
95 return size;
96 }
97 //求子字符串[start,start+n-1]
98 String String::substr(int start,int n){
99 String newStr;
100 delete[] newStr.data;
101 newStr.data=new char[n+1];
102 for(int i=0;i<n;++i){
103 newStr.data[i]=data[start+i];
104 }
105 newStr.data[n]='\0';
106 newStr.size=n;
107 return newStr;
108 }
109 //重载输出
110 ostream & operator<<(ostream &o,const String & str){
111 o<<str.data;
112 return o;
113 }
114 int main(){
115 String str1("Hello ");
116 String str2=str1;
117 str2=str1;
118 return 0;
119 }

请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。的更多相关文章

  1. C#中的String类2

    深入C# String类 C#中的String类 他是专门处理字符串的(String),他在System的命名空间下,在C#中我们使用的是string 小写的string只是大写的String的一个别 ...

  2. 标准C++中的String类的使用

    要使用标准C++中的String类,必须包含#include<string>(注意不是<string.h>带.h的是C语言中的头文件) 作者:耑新新,发布于  博客园 转载请注 ...

  3. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  4. Java 中的 String 类常用方法

    字符串广泛应用在Java编程中,在Java中字符串属于对象,String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等. Strin ...

  5. JAVA中的String类(详解)

    Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...

  6. 关于Java中的String类知识点小总结

    Java中的String类知识点 前言 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 如何创建字符串 最简单的方式 String str = "he ...

  7. STL中的string

    string常用函数 1.构造函数 string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 string类还支持默认构 ...

  8. 05-Java中的String类

    程序设计思路: 首先目标是使输入的字符串加上某个数变成另一个字符串,从而相当于对字符串进行加密. 第一步输入一个字符串String类型: 第二步把这个字符串转变成字符数组: 第三步让这个数组的每一个字 ...

  9. C++中的string类(1)

    http://blog.sina.com.cn/s/blog_51409e8f01009h7g.html 前言: string 的角色1 string 使用1.1 充分使用string 操作符1.2 ...

随机推荐

  1. 安装python和pycharm,以及常见安装问题

    目录 安装python 输入第一个python程序 安装python文本编辑器pycharm 执行main.py文件出现的问题 python编码规范 python是当前很常用的一门语言了,和Java, ...

  2. 【C# .Net GC】手动监视和控制对象的生命周期(GCHandle)

    这个话题还未做详细研究,暂时用不到,只是粗略看了一下. 使用System.Runtime.InteropServices.GCHandle类来手动控制对象的生命周期 (个人感觉这里可能有一些问题... ...

  3. 【面像对象编程OOP】五种设计原则 Solid

    "面向对象设计五大原则"和良性依赖原则在应付变化方面的作用. SOLID(单一功能.开闭原则.里氏替换.接口隔离以及依赖反转) 单一职责原则(Single-Resposibilit ...

  4. yapi安装 - windows

    yapi官网https://hellosean1025.github.io/yapi/devops/index.html 简介 ​ YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产 ...

  5. svn问题总结

    有问题先尝试右键刷新,或clean up svn图标不显示 解决办法:打开注册表regedit,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curren ...

  6. Java 实现Https访问工具类 跳过ssl证书验证

    不多BB ,代码直接粘贴可用 import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.F ...

  7. 浏览器无插件播放rtsp流解决方案

    1. 安装 FFmpeg 参考 CentOS下安装FFmpeg,特别详细. 我遇到的错误和解决办法: 缺少lame ffmpeg+libmp3lame库源码安装教程(CentOS) make ffmp ...

  8. 前端js webuploader上传(导入)excel文件

    项目开发中用到导入(上传)Excel文件 我使用的是百度的webuploader: 1:下载:http://fex.baidu.com/webuploader/(官方下载/示例) 2:使用Web Up ...

  9. Pycharm新建Python项目

    关于新建项目时配置项目环境(最好是每个项目单独的虚拟Python环境): Python为什么要使用虚拟环境-Python虚拟环境的安装和配置-virtualenv Pycharm创建Python项目 ...

  10. 【阅读SpringMVC源码】手把手带你debug验证SpringMVC执行流程

    ✿ 阅读源码思路: 先跳过非重点,深入每个方法,进入的时候可以把整个可以理一下方法的执行步骤理一下,也可以,理到某一步,继续深入,回来后,接着理清除下面的步骤. ✿ 阅读本文的准备工作,预习一下Spr ...