设计一个字符串类string,包含输入字符串,返回字符串内容及长度等功能
时间: 2023-06-16 22:06:35 浏览: 117
好的,下面是一个简单的字符串类string的设计:
```c++
#include <iostream>
#include <cstring>
class string {
private:
char* str; // 字符串内容
int len; // 字符串长度
public:
// 构造函数
string(const char* s = "") {
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
}
// 析构函数
~string() {
delete[] str;
}
// 返回字符串内容
const char* c_str() const {
return str;
}
// 返回字符串长度
int length() const {
return len;
}
// 重载赋值运算符
string& operator=(const string& s) {
if (this != &s) {
delete[] str;
len = s.len;
str = new char[len + 1];
std::strcpy(str, s.str);
}
return *this;
}
// 重载加法运算符
string operator+(const string& s) const {
string temp;
temp.len = len + s.len;
temp.str = new char[temp.len + 1];
std::strcpy(temp.str, str);
std::strcat(temp.str, s.str);
return temp;
}
// 重载等于运算符
bool operator==(const string& s) const {
return (len == s.len) && (std::strcmp(str, s.str) == 0);
}
// 重载不等于运算符
bool operator!=(const string& s) const {
return !(*this == s);
}
// 重载小于运算符
bool operator<(const string& s) const {
return std::strcmp(str, s.str) < 0;
}
// 重载大于运算符
bool operator>(const string& s) const {
return std::strcmp(str, s.str) > 0;
}
// 重载小于等于运算符
bool operator<=(const string& s) const {
return std::strcmp(str, s.str) <= 0;
}
// 重载大于等于运算符
bool operator>=(const string& s) const {
return std::strcmp(str, s.str) >= 0;
}
// 重载下标运算符
char& operator[](int i) {
return str[i];
}
// 重载下标运算符(const 版本)
const char& operator[](int i) const {
return str[i];
}
// 友元函数,重载输出运算符
friend std::ostream& operator<<(std::ostream& os, const string& s) {
os << s.str;
return os;
}
// 友元函数,重载输入运算符
friend std::istream& operator>>(std::istream& is, string& s) {
char temp[1000];
is >> temp;
s = temp;
return is;
}
};
```
这样,我们就可以使用这个字符串类进行字符串的输入、输出和各种操作了。例如:
```c++
int main() {
string s1("hello");
string s2("world");
string s3 = s1 + s2;
std::cout << s3 << std::endl;
std::cout << s3.length() << std::endl;
return 0;
}
```
输出结果:
```
helloworld
10
```
阅读全文