char*value; //构造函数//拷贝构造函数//析构函数 //赋值函数,如setValue(char*newvalue) //返回有效字符的个数//返回某个位置的字符//替换某个位置的字符//选做:合并两个字符串,如 Concat(MyString&) //选做:其他方法自行设计补充
时间: 2023-05-25 12:06:03 浏览: 43
char* s),其中 MyString 是当前实例的字符串,s 是另一个字符串。
class MyString {
private:
char* value;
public:
MyString() {
value = nullptr; // 初始化为空指针
}
MyString(const MyString& str) { // 拷贝构造函数
if (str.value == nullptr) {
value = nullptr;
} else {
int len = strlen(str.value) + 1;
value = new char[len];
strcpy(value, str.value);
}
}
~MyString() { // 析构函数
if (value != nullptr) {
delete[] value;
value = nullptr;
}
}
void setValue(char* newvalue) { // 赋值函数
if (value != nullptr) {
delete[] value;
}
if (newvalue == nullptr) {
value = nullptr;
} else {
int len = strlen(newvalue) + 1;
value = new char[len];
strcpy(value, newvalue);
}
}
int length() { // 返回有效字符的个数
if (value == nullptr) {
return 0;
} else {
return strlen(value);
}
}
char at(int index) { // 返回某个位置的字符
if (value == nullptr || index < 0 || index >= strlen(value)) {
return '\0';
}
return value[index];
}
void setAt(int index, char newchar) { // 替换某个位置的字符
if (value == nullptr || index < 0 || index >= strlen(value)) {
return;
}
value[index] = newchar;
}
// 选做:合并两个字符串
void concat(MyString s) {
if (s.value == nullptr) {
return;
}
int len1 = length();
int len2 = strlen(s.value);
char* newvalue = new char[len1 + len2 + 1];
if (value != nullptr) {
strcpy(newvalue, value);
}
strcpy(newvalue + len1, s.value);
setValue(newvalue);
delete[] newvalue;
}
};