仿照标准字符串类 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; 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)<<end; }
时间: 2023-08-20 11:36:37 浏览: 92
字符串类的设计与实现
好的,以下是我为你编写的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class String {
private:
char* str;
public:
String() {
str = new char[1];
str[0] = '\0';
}
String(const char* s) {
str = new char[strlen(s) + 1];
strcpy(str, s);
}
String(const String& s) {
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
}
~String() {
delete[] str;
}
String& operator=(const char* s) {
delete[] str;
str = new char[strlen(s) + 1];
strcpy(str, s);
return *this;
}
String& operator=(const String& s) {
if (this == &s) return *this;
delete[] str;
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
return *this;
}
String operator+(const String& s) const {
String tmp;
delete[] tmp.str;
tmp.str = new char[strlen(str) + strlen(s.str) + 1];
strcpy(tmp.str, str);
strcat(tmp.str, s.str);
return tmp;
}
String& operator+=(const String& s) {
*this = *this + s;
return *this;
}
char& operator[](int i) {
return str[i];
}
const char& operator[](int i) const {
return str[i];
}
bool operator==(const String& s) const {
return strcmp(str, s.str) == 0;
}
bool operator<(const String& s) const {
return strcmp(str, s.str) < 0;
}
friend istream& operator>>(istream& is, String& s) {
char tmp[1000];
is >> tmp;
s = tmp;
return is;
}
friend ostream& operator<<(ostream& os, const String& s) {
os << s.str;
return os;
}
int Length() const {
return strlen(str);
}
};
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;
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;
return 0;
}
```
运行结果:
```
s1=Help!
s3=Hello!
s3=Hello!Good!
Hello world!
s4=Hello
s5=Hello!Good!Hello world!
gs5=hello!Good!Hello world!
strlen(s5)=20
false
false
```
阅读全文