请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
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类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。的更多相关文章
- C#中的String类2
深入C# String类 C#中的String类 他是专门处理字符串的(String),他在System的命名空间下,在C#中我们使用的是string 小写的string只是大写的String的一个别 ...
- 标准C++中的String类的使用
要使用标准C++中的String类,必须包含#include<string>(注意不是<string.h>带.h的是C语言中的头文件) 作者:耑新新,发布于 博客园 转载请注 ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
- Java 中的 String 类常用方法
字符串广泛应用在Java编程中,在Java中字符串属于对象,String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等. Strin ...
- JAVA中的String类(详解)
Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...
- 关于Java中的String类知识点小总结
Java中的String类知识点 前言 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 如何创建字符串 最简单的方式 String str = "he ...
- STL中的string
string常用函数 1.构造函数 string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 string类还支持默认构 ...
- 05-Java中的String类
程序设计思路: 首先目标是使输入的字符串加上某个数变成另一个字符串,从而相当于对字符串进行加密. 第一步输入一个字符串String类型: 第二步把这个字符串转变成字符数组: 第三步让这个数组的每一个字 ...
- C++中的string类(1)
http://blog.sina.com.cn/s/blog_51409e8f01009h7g.html 前言: string 的角色1 string 使用1.1 充分使用string 操作符1.2 ...
随机推荐
- vue的拖拽vuedraggable组件使用方法
<template> <div id="app"> <vuedraggable class="wrapper" ...
- css边框普通属性
border :(边框): 其实现在的border是三个属性合成的, border-width:边框大小: border-style:边框的样式: border-color:边框的颜色: 合成以后的用 ...
- Python语法3
目录 模块 Python程序架构 第三方工具包: 创建packet包 模块导入方式 异常处理 六种典型异常 异常处理 自定义异常 模块 Python程序架构 Python源代码文件:*.py 一个py ...
- scoped样式
scoped样式 作用∶让样式在局部生效防止冲突 写法∶<style scoped> 比如School组件和Student组件的样式名一样,当组件汇总到一起时样式会冲突.所以加上scope ...
- tensorflow源码剖析之framework-kernel
目录 什么是kernel kernel_def op_kernel kernel的注册 op_segment 关系图 涉及的文件 迭代记录 1. 什么是kernel 如果说op相当于操作的声明,那么k ...
- tensorflow core 核心目标依赖图
Tensorflow的核心代码在core模块中,56w行的代码量让人望而生畏,熟悉了bazel工具之后,发现BUILD文件是理清代码结构的很好的资源,但使用bazel query语法提取出来//ten ...
- 完全激活win server 2012的方法(亲测可行!)
1.从微软官网下载评估版. 2.运行->CMD(最好以管理员身份运行)->输入"DISM /online /Get-CurrentEdition"(最好直接复制粘贴,然 ...
- 2022 年最受瞩目的新特性 CSS @layer 到底是个啥?
步入 2022,CSS 的新特性层出不穷,而最近在 CSS 圈最受瞩目的新特性,非 CSS @layer 莫属. 本文,将用最简洁的语言,快速让读者们搞懂,到底什么是 CSS @layer 新规范. ...
- rancher更新集群证书
进入rancher 等待更新完成 查看证书到期时间 >>>在rancher容器内部执行查看集群证书信息 for i in ls /var/lib/rancher/k3s/server ...
- 使用gdb
1.设置断点,在源程序第16 行处 (gdb)break 16 Breakpoint 1 at 0x8048496: file tst.c, line 16. 2.设置断点,在函数func()入口处. ...