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. Clickhouse - Replication机制

    Clickhouse - Replication机制 1. Replication引擎族 Replication仅对于MergeTree引擎族提供支持, 两者是正交的: ReplicatedMerge ...

  2. 用图帮你了解https的原理

    Http存在的问题 上过网的朋友都知道,网络是非常不安全的.尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵.还有大家平时喜欢用的万能钥匙,等等.那我们平时上网可能会存在哪些风险呢? 泄密, ...

  3. 【C#】AssemblyLoadContext 加载程序集

    使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载 一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.N ...

  4. CDH6.2.0离线安装(详细)

    目录 01 准备工作 02 环境配置 03 CDH安装 报错 01 准备工作 官网地址下载页面:https://www.cloudera.com/downloads/cdh.html,现在下载好像需要 ...

  5. linux批量修改root密码脚本

    转至:https://blog.csdn.net/onionm/article/details/100514892?utm_medium=distribute.pc_relevant_download ...

  6. IDEA 连接MySQL并使用

    IDEA 连接MySQL方式 MySQL使用命令行的形式实在是有点难受,多行书写的时候要是写错了就比较难过了,因此还是需要一个图形化的操作界面.有很多可选择方式,由于之前就下载了IDEA,其中也继承了 ...

  7. ROS中msg和srv文件的区别

    1.msg和srv究竟有什么区别?? msg只是单向的发送和接受. srv包含两个部分:请求和响应. 2.msg和srv简介 msg:msg文件是描述ROS消息字段的简单文本文件.它们用于为不同语言( ...

  8. qyqt5(一)

    一.PyQt窗口处理 1. 第一个PyQt窗口 from PyQt5.QtWidgets import QApplication,QWidget import sys # 1.创建应用程序 app = ...

  9. appium1-macOS10.12下如何丝滑的使用appium?

    1.下载或者更新Homebrew:homebrew官网 macOS 不可或缺的套件管理器 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githu ...

  10. JZ-046-圆圈中最后剩下的数

    圆圈中最后剩下的数 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏. 其中,有个游戏是这样的:首先,让小朋友们围成一 ...