字符串
Data Structures Experiment #6 - 封装字符串类。
MyString.h中的private需要添加必要的成员变量。并实现MyString.cpp中的接口方法。
MyString::MyString(const char* str);
构造函数,使用str构造MyString实例。
MyString::~MyString();
析构函数。
int MyString::length() const;
返回储存字符串的长度。
void MyString::replace(const char* replace, int loc);
将字符串中,从loc开始替换为replace。例如,假设
MyString实例msa储存的字符串为“hello”,执行msa.replace("str", 1)后,msa中储存的字符串变为 “hstr”。
int MyString::find(const char* str) const;
在MyString实例中查找str第一次出现的位置。如果实例中不包含str,则返回-1。注意,需要使用KMP方法实现。
例如MyString实例msa储存的字符串为“aaabab”, 执行msa.find("ab")返回2。msa.find("abc")返回-1。
const char* MyString::c_string() const;
返回储存在实例中字符串。
0x00 数据域封装
字符数组及其长度。
1 | private: |
0x01 构造函数
长度即为输入串的长度,对字符指针分配内存并拷贝,末尾加'\0'。
1 | MyString::MyString(const char* str){ |
0x02 length
直接返回长度。
1 | int MyString::length() const{ |
0x03 replace
如果替换后长度增加,则需要重新分配内存。
再从loc处开始拷贝。
长度改变。
1 | void MyString::replace(const char* rep, int loc){ |
0x04 find
利用KMP方法。
首先获取
next数组:子串
str自身匹配,求最大匹配数(第12行)。获取
next数组后开始对比:myStr串不回溯,每当不匹配时str串索引j回溯到next[j]处。当j == strlen(str)时说明已找到,否则未找到。
1 | int MyString::find(const char* str) const{ |
0x05 c_string
返回字符数组。
1 | const char* MyString::c_string() const{ |
0x06 析构函数
释放内存。
1 | MyString::~MyString(){ |