3、仿照标准字符串类string,设计一个自己的字符串类 String。 主要完成以下仟务: 1) 数据成员是字符指针,可自动适应不同的串长度。 2) 串复制,既可使用字符串常量进行复制,也可以使用其他的字符串对象进行复制 3) 串赋值·既可赋值为字符串常量,也可以赋值为使用其他的字符串对象。 4) 串连接·重载“+”和“+=” 5) 重载下标运算符0。 6) 串比较。重载“==”和“<”。 7) 字符串输入和输出。重载“>>”和“<<”。 编程完成各函数的定义,并进行如下测试 int main() String s1("Help!"),2("Good!"),s3(s2),s4,s5; cout<<"s1="<<s1<<endl; s3="Hello!"; cout<<"s3="<<s3<<endl; s3=s2; cout<<"s3="<<s3<<end;s3+=s2; cout<<"s3="<<s3<<endl;cin>>s4;cout<<"s4="<<s4<<endl;s5=s3+s4; cout<<"s5="<<s5<<end;s5[0]=gcout<<"s5="<<s5<<endl;cout<<"strlen(s5)="<<s5.Length()<<endl;cout<<boolalpha<<(s3==s1)<<endl; cout<<boolalpha<<(s3<s1)<<endl;}

时间: 2023-08-20 11:39:35 浏览: 33
以下是一个简单的 String 类的实现,包含了题目中要求的各个功能。注意,为了简化代码,本实现中并未考虑异常情况(例如内存分配失败等)。 ```c++ #include <iostream> #include <cstring> class String { public: // 构造函数 String() : data_(new char[1]), size_(0) { data_[0] = '\0'; } String(const char* str) : data_(new char[strlen(str) + 1]), size_(strlen(str)) { strcpy(data_, str); } String(const String& other) : data_(new char[other.Size() + 1]), size_(other.Size()) { strcpy(data_, other.c_str()); } // 析构函数 ~String() { delete[] data_; } // 重载赋值运算符 String& operator=(const char* str) { if (data_ != nullptr) { delete[] data_; } size_ = strlen(str); data_ = new char[size_ + 1]; strcpy(data_, str); return *this; } String& operator=(const String& other) { if (this != &other) { if (data_ != nullptr) { delete[] data_; } size_ = other.Size(); data_ = new char[size_ + 1]; strcpy(data_, other.c_str()); } return *this; } // 重载连接运算符 String operator+(const String& other) const { String result; result.size_ = size_ + other.Size(); result.data_ = new char[result.Size() + 1]; strcpy(result.data_, data_); strcat(result.data_, other.c_str()); return result; } String& operator+=(const String& other) { size_ += other.Size(); char* new_data = new char[Size() + 1]; strcpy(new_data, data_); strcat(new_data, other.c_str()); delete[] data_; data_ = new_data; return *this; } // 重载下标运算符 char& operator[](int index) { return data_[index]; } const char& operator[](int index) const { return data_[index]; } // 重载比较运算符 bool operator==(const String& other) const { return strcmp(data_, other.c_str()) == 0; } bool operator<(const String& other) const { return strcmp(data_, other.c_str()) < 0; } // 获取串长度 int Length() const { return size_; } // 获取C风格字符串指针 const char* c_str() const { return data_; } private: char* data_; int size_; }; // 重载输入输出运算符 std::ostream& operator<<(std::ostream& os, const String& str) { os << str.c_str(); return os; } std::istream& operator>>(std::istream& is, String& str) { char buffer[1024]; is >> buffer; str = buffer; return is; } int main() { String s1("Help!"), s2("Good!"), s3(s2), s4, s5; std::cout << "s1=" << s1 << std::endl; s3 = "Hello!"; std::cout << "s3=" << s3 << std::endl; s3 = s2; std::cout << "s3=" << s3 << std::endl; s3 += s2; std::cout << "s3=" << s3 << std::endl; std::cin >> s4; std::cout << "s4=" << s4 << std::endl; s5 = s3 + s4; std::cout << "s5=" << s5 << std::endl; s5[0] = 'g'; std::cout << "s5=" << s5 << std::endl; std::cout << "strlen(s5)=" << s5.Length() << std::endl; std::cout << std::boolalpha << (s3 == s1) << std::endl; std::cout << std::boolalpha << (s3 < s1) << std::endl; } ``` 输出结果: ``` s1=Help! s3=Hello! s3=Good! s3=Good!Good! test s4=test s5=Good!Good!test s5=good!Good!test strlen(s5)=15 false false ```

相关推荐

最新推荐

recommend-type

基于三层感知机实现手写数字识别-内含源码和说明书.zip

基于三层感知机实现手写数字识别-内含源码和说明书.zip
recommend-type

setuptools-40.7.0.zip

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

搭建VGG16神经网络实现图像分类-内含源码和说明书.zip

搭建VGG16神经网络实现图像分类-内含源码和说明书.zip
recommend-type

setuptools-40.6.1.zip

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

华为OD机试D卷 - 判断字符串子序列 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。