下面是详细讲解"C++编写String类代码实例"的攻略:
1. 什么是String类?
String类是C++中封装了的字符串类,它提供了很多操作字符串的方法,如获取字符串长度、复制字符串、连接字符串、比较字符串等等。使用String类可以大大简化字符串操作的过程,提高代码可读性和可维护性。
2. String类的基本实现
2.1 类的定义
class String {
public:
String(); // 默认构造函数,构造一个空字符串
String(char ch); // 构造函数,用一个字符来初始化字符串
String(const char *str); // 构造函数,用一个C风格的字符串来初始化字符串
String(const String &other); // 构造函数,用另一个String对象来初始化字符串
~String(); // 析构函数,释放内存
char& operator[](int index); // 重载运算符[],用于访问字符串中的字符
String operator+(const String &other); // 重载运算符+,用于字符串连接
String& operator=(const String &other); // 重载运算符=,用于赋值
bool operator==(const String &other); // 重载运算符==,用于比较字符串是否相等
int length() const; // 获取字符串长度
char* c_str() const; // 返回C风格字符串
private:
char *data; // 指向字符串的指针
int len; // 字符串长度
};
2.2 构造函数的实现
String::String() {
len = 0;
data = new char[1]; // 构造一个空字符串,分配1个字节的空间
data[0] = '\0'; // 让字符串以\0结尾
}
String::String(char ch) {
len = 1;
data = new char[2]; // 构造一个字符长度的字符串,分配2个字节的空间(一个用于字符,一个用于\0)
data[0] = ch;
data[1] = '\0'; // 让字符串以\0结尾
}
String::String(const char *str) {
len = strlen(str);
data = new char[len + 1]; // 分配字符串长度+1的空间(一个用于\0)
strcpy(data, str); // 复制C风格字符串到指定的内存位置(data指向的位置)
}
String::String(const String &other) {
len = other.len;
data = new char[len + 1];
strcpy(data, other.data);
}
2.3 析构函数的实现
String::~String() {
delete[] data; // 释放内存
}
2.4 运算符重载的实现
char& String::operator[](int index) {
if (index >= len) {
throw out_of_range("Index out of range."); // 抛出异常
}
return data[index]; // 访问指定下标的字符
}
String String::operator+(const String &other) {
String newStr;
newStr.len = len + other.len;
newStr.data = new char[newStr.len + 1];
strcpy(newStr.data, data);
strcat(newStr.data, other.data);
return newStr;
}
String& String::operator=(const String &other) {
if (this == &other) {
// 如果是自己赋值给自己,直接返回this
return *this;
}
len = other.len;
delete[] data; // 释放原有的内存指针
data = new char[len + 1];
strcpy(data, other.data);
return *this;
}
bool String::operator==(const String &other) {
if (len != other.len) {
return false;
}
return strcmp(data, other.data) == 0;
}
2.5 成员函数的实现
int String::length() const {
return len;
}
char* String::c_str() const {
return data;
}
3. String类的使用示例
下面是两个使用例子:
// 示例1:创建String对象、复制、比较
String str1; // 创建一个空的String对象
String str2("hello"); // 创建一个值为"hello"的String对象
String str3(str2); // 复制str2对象到str3中
if (str1 == str2) { // 比较字符串是否相等
cout << "str1 equal to str2" << endl;
} else {
cout << "str1 not equal to str2" << endl;
}
cout << "str2 length is " << str2.length() << endl; // 获取字符串长度
// 示例2:访问String对象中的字符、连接多个String对象
String str4 = str2 + String(" world"); // 字符串连接
str4[0] = 'H'; // 用重载的[]运算符访问字符串中的字符
cout << "str4 is " << str4.c_str() << endl; // 返回C风格字符串
以上是使用示例,更适合理解代码的核心部分。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++编写String类代码实例 - Python技术站