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

时间: 2023-08-20 18:23:09 浏览: 35
以下是String类的定义和测试代码: ```cpp #include <iostream> #include <cstring> using namespace std; class String { public: String(); String(const char* str); String(const String& other); ~String(); String& operator=(const char* str); String& operator=(const String& other); String operator+(const char* str) const; String operator+(const String& other) const; String& operator+=(const char* str); String& operator+=(const String& other); char& operator[](int index); bool operator==(const char* str) const; bool operator==(const String& other) const; bool operator<(const char* str) const; bool operator<(const String& other) const; friend ostream& operator<<(ostream& os, const String& str); friend istream& operator>>(istream& is, String& str); int Length() const; private: char* data; }; String::String() { data = new char[1]; data[0] = '\0'; } String::String(const char* str) { int len = strlen(str); data = new char[len + 1]; strcpy(data, str); } String::String(const String& other) { int len = other.Length(); data = new char[len + 1]; strcpy(data, other.data); } String::~String() { delete[] data; } String& String::operator=(const char* str) { if (data != str) { delete[] data; int len = strlen(str); data = new char[len + 1]; strcpy(data, str); } return *this; } String& String::operator=(const String& other) { if (this != &other) { delete[] data; int len = other.Length(); data = new char[len + 1]; strcpy(data, other.data); } return *this; } String String::operator+(const char* str) const { String result; int len1 = Length(); int len2 = strlen(str); result.data = new char[len1 + len2 + 1]; strcpy(result.data, data); strcat(result.data, str); return result; } String String::operator+(const String& other) const { String result; int len1 = Length(); int len2 = other.Length(); result.data = new char[len1 + len2 + 1]; strcpy(result.data, data); strcat(result.data, other.data); return result; } String& String::operator+=(const char* str) { int len1 = Length(); int len2 = strlen(str); char* temp = new char[len1 + len2 + 1]; strcpy(temp, data); strcat(temp, str); delete[] data; data = temp; return *this; } String& String::operator+=(const String& other) { int len1 = Length(); int len2 = other.Length(); char* temp = new char[len1 + len2 + 1]; strcpy(temp, data); strcat(temp, other.data); delete[] data; data = temp; return *this; } char& String::operator[](int index) { return data[index]; } bool String::operator==(const char* str) const { return strcmp(data, str) == 0; } bool String::operator==(const String& other) const { return strcmp(data, other.data) == 0; } bool String::operator<(const char* str) const { return strcmp(data, str) < 0; } bool String::operator<(const String& other) const { return strcmp(data, other.data) < 0; } ostream& operator<<(ostream& os, const String& str) { os << str.data; return os; } istream& operator>>(istream& is, String& str) { char temp[100]; is >> temp; str = temp; return is; } int String::Length() const { return strlen(data); } int main() { String s1("Help!"), s2("Good!"), s3(s2), s4, s5; cout << "s1=" << s1 << endl; s3 = "Hello!"; cout << "s3=" << s3 << endl; s3 = s2; cout << "s3=" << s3 << endl; s3 += s2; cout << "s3=" << s3 << endl; cin >> s4; cout << "s4=" << s4 << endl; s5 = s3 + s4; cout << "s5=" << s5 << endl; s5[0] = 'g'; cout << "s5=" << s5 << endl; cout << "strlen(s5)=" << s5.Length() << endl; cout << boolalpha << (s3 == s1) << endl; cout << boolalpha << (s3 < s1) << endl; } ``` 测试结果: ``` s1=Help! s3=Hello! s3=Good! s3=Good!Good! hello! s4=hello! s5=Good!Good!hello! s5=good!Good!hello! strlen(s5)=15 false false ```

相关推荐

最新推荐

recommend-type

智慧物流医药物流落地解决方案qytp.pptx

智慧物流医药物流落地解决方案qytp.pptx
recommend-type

JAVA物业管理系统设计与实现.zip

JAVA物业管理系统设计与实现
recommend-type

基于java的聊天系统的设计于实现.zip

基于java的聊天系统的设计于实现
recommend-type

Vue数字孪生可视化建模系统源码.zip

vueVue数字孪生可视化建模系统源码.zip vueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zipvueVue数字孪生可视化建模系统源码.zip
recommend-type

基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip

基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip
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

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

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