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 17:23:09 浏览: 74
以下是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
```
阅读全文