1、定义String类,用于实现字符串,其中有: 数据成员array,类型为char* 。 构造函数String(const char* p)、析构函数~String()。 根据以下main函数及运行结果,实现必要的运算符重载,使得输出符合指定结果。其中string1[index],要求index的值在0到字符串不算结束符的长度减一),否则显示“Index out of range.”。而string3+3表示将字符串不算结束符的长度与3相加,且要求不能再重载+运算符。 2、主函数定义如下(不能修改): int main(){ String string1("mystring"),string2("yourstring"),string3("herstring"); cout<<string1<<endl; string1[7]='n'; cout<<string1<<endl; string1[8]='n'; cout<<string1+string2+string3<<endl; cout<<string1<<endl; cout<<string2+"ab"<<endl; cout<<string2<<endl; cout<<string3+3<<endl; cout<<string3<<endl; return 0; } 3、无输入,输出信息为: mystring mystrinn Index out of range. mystrinnyourstringherstring mystrinnyourstringherstring yourstringab yourstring 12 herstring
时间: 2023-08-20 15:25:00 浏览: 128
以下是实现String类的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class String {
private:
char* array;
public:
String(const char* p) {
if (p == nullptr) {
array = nullptr;
return;
}
int len = strlen(p);
array = new char[len + 1];
strcpy(array, p);
}
String(const String& s) {
if (s.array == nullptr) {
array = nullptr;
return;
}
int len = strlen(s.array);
array = new char[len + 1];
strcpy(array, s.array);
}
~String() {
delete [] array;
}
char& operator[] (int index) {
if (index >= 0 && index < strlen(array)) {
return array[index];
}
else {
cout << "Index out of range." << endl;
exit(1);
}
}
friend String operator+ (const String& s1, const String& s2) {
String temp("");
int len = 0;
if (s1.array != nullptr) {
len += strlen(s1.array);
}
if (s2.array != nullptr) {
len += strlen(s2.array);
}
temp.array = new char[len + 1];
if (s1.array != nullptr) {
strcpy(temp.array, s1.array);
}
if (s2.array != nullptr) {
strcat(temp.array, s2.array);
}
return temp;
}
friend String operator+ (const String& s, int n) {
char temp[100];
sprintf(temp, "%d", (int)strlen(s.array) + n);
String result(temp);
return result;
}
friend ostream& operator<< (ostream& os, const String& s) {
os << s.array;
return os;
}
};
```
解释:
1. 在类中定义了 `array` 数据成员,表示字符串。
2. 构造函数 `String(const char* p)`,根据传入的 `const char*` 类型指针构造一个 `String` 对象。
3. 拷贝构造函数 `String(const String& s)`,根据传入的 `String` 对象构造一个新的 `String` 对象。
4. 析构函数 `~String()`,释放动态分配的内存。
5. 运算符重载 `operator[]`,重载下标运算符,用于访问字符串中的元素,并进行下标越界检查。
6. 运算符重载 `operator+`,重载加号运算符,用于实现字符串的拼接。
7. 运算符重载 `operator+`,重载加号运算符,用于实现字符串长度加上一个整数的操作。
8. 运算符重载 `operator<<`,重载输出运算符,用于输出字符串。
在主函数中按照题目要求进行操作即可。
阅读全文