定义一个字符串类 String,增加下列成员函数: bool IsSubstring(const char *str):判断 str 是否为当前串的子串; bool IsSubstring(const String &str):判断 str 是否为当前串的子串; int str2num():把数字串转换成数; void toUppercase():把字符串转换成大写字母
时间: 2023-06-11 15:06:41 浏览: 193
&str):重载 IsSubstring 函数,判断 str 是否为当前串的子串; void Append(const char *str):将 str 串附加到当前串的末尾; void Append(const String &str):重载 Append 函数,将 str 串附加到当前串的末尾; void Replace(const char *oldstr, const char *newstr):用 newstr 串替换当前串中的 oldstr 串; void Replace(const String &oldstr, const String &newstr):重载 Replace 函数,用 newstr 串替换当前串中的 oldstr 串; void Delete(int start, int len):删除从 start 位置开始的 len 个字符; int Length():返回当前串的长度。
下面是 String 类的示例实现:
```c++
#include <cstring>
class String {
char *data;
int len;
public:
String() {
data = new char[1];
data[0] = '\0';
len = 0;
}
String(const char *str) {
len = strlen(str);
data = new char[len + 1];
strcpy(data, str);
}
String(const String &str) {
len = str.len;
data = new char[len + 1];
strcpy(data, str.data);
}
~String() {
delete [] data;
}
bool IsSubstring(const char *str) {
return strstr(data, str) != nullptr;
}
bool IsSubstring(const String &str) {
return strstr(data, str.data) != nullptr;
}
void Append(const char *str) {
int new_len = len + strlen(str);
char *new_data = new char[new_len + 1];
strcpy(new_data, data);
strcat(new_data, str);
delete [] data;
data = new_data;
len = new_len;
}
void Append(const String &str) {
Append(str.data);
}
void Replace(const char *oldstr, const char *newstr) {
char *pos = strstr(data, oldstr);
if (pos != nullptr) {
int old_len = strlen(oldstr);
int new_len = strlen(newstr);
int shift = new_len - old_len;
int tail_len = len - (pos - data) - old_len;
char *new_data = new char[len + shift + 1];
strncpy(new_data, data, pos - data);
new_data[pos - data] = '\0';
strcat(new_data, newstr);
strcat(new_data, pos + old_len);
delete [] data;
data = new_data;
len += shift;
}
}
void Replace(const String &oldstr, const String &newstr) {
Replace(oldstr.data, newstr.data);
}
void Delete(int start, int len) {
if (start >= 0 && start < this->len) {
if (len < 0) {
len = this->len - start;
}
if (start + len > this->len) {
len = this->len - start;
}
memmove(data + start, data + start + len, this->len - start - len + 1);
this->len -= len;
}
}
int Length() {
return len;
}
};
```