字符串
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(){ |