C++实现顺序串(完整代码)

代码如下:

#include<iostream>
#include <cstring>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;class String
{
public:String(){size = 0;str = new char[size + 1];str[0] = '\0';}String(const String &obj){size = obj.size;str = new char[size + 1];if (str == nullptr){cout << "Failed to apply for space" << endl;exit(1);}strcpy(str, obj.str);}String(const char *s){size = strlen(s);str = new char[size + 1];if (str == nullptr){cout << "Failed to apply for space" << endl;exit(1);}strcpy(str, s);}String substr(int pos, int length){String tmp;int len = size - pos >= length ? length : size - pos;tmp.size = len;tmp.str = new char[len + 1];for (int i = 0; i < len; i++){tmp.str[i] = str[i + pos];}tmp.str[len] = '\0';return tmp;}void insert(const String &obj, int pos){String tmp;tmp.size = obj.size + size;tmp.str = new char[tmp.size + 1];for (int i = 0; i < pos; i++){tmp.str[i] = str[i];}for (int i = pos; i < pos + obj.size; i++){tmp.str[i] = obj.str[i - pos];}for (int i = 0; i < size - pos; i++){tmp.str[i+pos + obj.size] = str[pos + i];}tmp.str[tmp.size] = '\0';delete[] str;str = tmp.str;size = tmp.size;tmp.str = nullptr;}void Delete(int pos, int length){String tmp;int len = size - pos >= length ? length : size - pos;tmp.size = size-len;tmp.str = new char[tmp.size + 1];int i = 0;while (i < pos){tmp.str[i] = str[i];i++;}int j = pos + len;while (j < size){tmp.str[i] = str[j];i++;j++;}tmp.str[i] = '\0';delete[] str;str = tmp.str;size = tmp.size;tmp.str = nullptr;}int strsize(){return size;}String &operator=(String obj){if (this->str == obj.str) return *this;if (str != nullptr) delete[] str;size = obj.size;str = new char[size + 1];strcpy(str, obj.str);return *this;}String &operator=(const char *s){if (this->str == s) return *this;if (str != nullptr) delete[] str;size = strlen(s);str = new char[size + 1];strcpy(str, s);return *this;}String operator+(String &obj){String tmp;tmp.size = size + obj.size;tmp.str = new char[tmp.size + 1];for (int i = 0; i < size; i++){tmp.str[i] = str[i];}for (int i = size; i < tmp.size; i++){tmp.str[i] = obj.str[i - size];}tmp.str[tmp.size] = '\0';return tmp;}String operator+(const char *s){String tmp;tmp.size = strlen(s) + size;tmp.str = new char[tmp.size + 1];for (int i = 0; i < size; i++){tmp.str[i] = str[i];}for (int i = size; i < tmp.size; i++){tmp.str[i] = s[i - size];}tmp.str[tmp.size] = '\0';return tmp;}friend String operator+(const char *s, String &obj);friend ostream &operator<<(ostream &os, const String &obj);friend istream &operator>>(istream &is, String &obj);bool operator ==(const String &b){if (size != b.size) return false;for (int i = 0; i < size; i++){if (str[i] != b.str[i]) return false;}return true;}bool operator !=(const String &b){if (*this == b) return false;return true;}char &operator[](int x){if ( x> size) {cout << "The value passed in is out of bounds" << endl;exit(1);}return str[x];}const char &operator[](int x) const{if (x > size){cout << "The value passed in is out of bounds" << endl;exit(1);}return str[x];}~String(){if (str != nullptr)delete[] str;}char *str;int size;
};String operator+(const char *s, String &obj)
{String tmp;int len = strlen(s);tmp.size = strlen(s) + obj.size;tmp.str = new char[tmp.size + 1];for (int i = 0; i < len; i++){tmp.str[i] = s[i];}for (int i = len; i < tmp.size; i++){tmp.str[i] = obj.str[i - len];}tmp.str[tmp.size] = '\0';return tmp;
}ostream &operator<<(ostream &os, const String &obj)
{os << obj.str;return os;
}int main()
{String s("hello");String s1(s);cout << s1.strsize() << endl;cout << s1 << endl;s1.Delete(2, 3);cout << s1 << endl;s1.insert("llo", 2);cout << s1 << endl;cout << s1 + s << endl;cout << s[1] << endl;return 0;
}

测试结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

投影仪硬件边缘融合服务器,带你了解投影融合的边缘融合显示技术

原标题&#xff1a;带你了解投影融合的边缘融合显示技术边缘融合显示系统是一个专业、复杂的视屏显示系统。在设计组建的时候务必考虑周密&#xff0c;消除各类不良因素。因为边缘融合系统建设具有相关器材多、系统连接复杂、易受环境因素干扰的特性&#xff0c;所以如果没有在…

Sql Server之旅——第六站 为什么都说状态少的字段不能建索引

我们在学sqlserver的时候&#xff0c;大多教科书和前辈们都说状态少的字段不要建索引&#xff0c;由此带来的开销还不如不建索引&#xff0c;但是这句话有多少人真的知道&#xff0c;或者说有多少人真的对此有比较深刻的理解&#xff0c;而不是听别人道听途说。。。这样记得快&…

概率论复习题+部分详解

概率论与数理统计练习题 1.假设检验中&#xff0c;显著性水平α\alphaα 限制&#xff08;第一类错误&#xff08;拒真错误&#xff09;#&#xff09;的概率 分析&#xff1a; &#xff08;1&#xff09;&#xff0e;原假设为真时拒绝原假设的概率不超过α &#xff08;2&…

【壹刊】Azure AD B2C(一)初识

一&#xff0c;引言&#xff08;上节回顾&#xff09;上一节讲到Azure AD的一些基础概念&#xff0c;以及如何运用 Azure AD 包含API资源&#xff0c;Azure AD 是微软提供的云端的身份标识和资源访问服务&#xff0c;帮助员工/用户/管理员访问一些外部资源和内部资源&#xff1…

英语期末复习unit 3-4课后习题第一题及背诵段落

unit 3 背诵段落&#xff1a; 2 When a recent college graduate came into my office not too long ago looking for a sales job, I asked him what he had done to prepare for the interview. He said he’d read something about us somewhere. 不久前一个新近毕业的大…

操作系统知识点总结+最终版

1、测试题要搞明白 点击可得测试题详解 2、操作系统的四个基本特征&#xff0c;基本功能 操作系统的目标:方便性、有效性、可扩充性、开放性。 操作系统的四大基本特征&#xff1a;1、并发2、共享3、虚拟4、异步&#xff1b; 操作系统的五大功能分别是处理器管理、存储器管理…

如何看云服务器性能,从存储速度看云服务器性能测试

阿 贝云提供免 费云服务器、免 费云虚拟主机&#xff0c;大家有兴趣的可以看看&#xff0c;物超所值喔。衡量存储性能一般看吞吐量(传输速度)和IOPS两个指标。吞吐量主要指大文件的连续读写速度&#xff0c;在大文件的复制、备份等场景适用&#xff0c;用“HD Tune专业版”中的…

操作系统复习题

一、填空题 1&#xff0e;通常所说操作系统的四大模块是指处理机管理、存储管理、设备管理、文件 管理。 2&#xff0e;进程实体是由 进程控制块&#xff08;PCB&#xff09; 、程序段和数据段这三部分组成。 3&#xff0e;文件系统中&#xff0c;空闲存储空间的管理方法有空…

Polly:提升服务可用性

Polly是.NET生态非常著名的组件包一 介绍Polly 的能力• 失败重试&#xff1a;当我们服务调用失败时&#xff0c;能够自动的重试• 服务熔断&#xff1a;当我们服务部分不可用时&#xff0c;我们的应用可以快速响应一个熔断结果&#xff0c;避免持续的请求这些不可用的服务而导…

[汇编语言]实验一:查看CPU和内存,用机器指令和汇编指令编程。

实验一 实验任务: 查看CPU和内存&#xff0c;用机器指令和汇编指令编程。 实验内容: &#xff08;1&#xff09;实验代码: 开始执行命令: &#xff08;2&#xff09;实验代码: &#xff08;3&#xff09;实验代码: 找到了,日期为:01/01/92&#xff0c;这个是虚拟机dos环境(因…

为自己而活,这很难吗?

上周&#xff0c;我的朋友圈被 #翼装飞行失联女生死亡事件# 刷屏了&#xff0c;不知道你有没有被刷到&#xff1f;什么&#xff1f;你不知道这件事&#xff1f;没事&#xff0c;我来简单叙述一下。大致是说一个24岁女大学生翼装飞行员&#xff0c;在张家界天门山景区的一次翼装…

基于 abp vNext 和 .NET Core 开发博客项目 - 异常处理和日志记录

在开始之前&#xff0c;我们实现一个之前的遗留问题&#xff0c;这个问题是有人在GitHub Issues(https://github.com/Meowv/Blog/issues/8)上提出来的&#xff0c;就是当我们对Swagger进行分组&#xff0c;实现IDocumentFilter接口添加了文档描述信息后&#xff0c;切换分组时会…

操作系统复习题+最终版

一、单选题 1、在单处理器系统中&#xff0c;如果同时存在9个进程&#xff0c;则处于就绪队列中的进程最多有&#xff08;8&#xff09;个。 A.1 B.9 C.10 D.8 分析&#xff1a;不可能出现这样一种情况&#xff0c;单处理器系统9个进程都处于就绪状态&#xff0c;但是8个处于…

[汇编语言]实验二:字的传送

实验二 实验内容: &#xff08;1&#xff09;: &#xff08;2&#xff09;:如果把上面的ax改成al呢&#xff1f; &#xff08;3&#xff09;: &#xff08;4&#xff09;: &#xff08;1&#xff09;实验代码: &#xff08;2&#xff09;实验代码: &#xff08;3&#xf…