编写程序实现字符串的基本操作,包括求串长、赋值、比较、串连接、求子串、替换和定位算法。代码
时间: 2023-10-20 17:04:39 浏览: 114
很高兴能与您交流!以下是一个可以实现字符串基本操作的 C++ 代码示例:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class String {
private:
char* str; // 字符串指针
int len; // 字符串长度
public:
String() { // 默认构造函数
str = new char[1];
str[0] = '\0';
len = 0;
}
String(const char* s) { // 参数为 char* 的构造函数
len = strlen(s);
str = new char[len+1];
strcpy(str, s);
}
String(const String& s) { // 复制构造函数
len = s.len;
str = new char[len+1];
strcpy(str, s.str);
}
~String() { delete []str; } // 析构函数
// 求字符串长度
int length() const { return len; }
// 赋值操作符 =
String& operator=(const char* s) {
if (str != s) {
delete [] str;
len = strlen(s);
str = new char[len+1];
strcpy(str, s);
}
return *this;
}
// 比较操作符 ==
bool operator==(const String& s) const {
return strcmp(str, s.str) == 0;
}
// 连接操作符 +
String operator+(const String& s) const {
String temp;
int totalLen = len + s.len;
temp.str = new char[totalLen+1];
temp.len = totalLen;
strcpy(temp.str, str);
strcat(temp.str, s.str);
return temp;
}
// 求子串函数
String substr(int start, int len) const {
if (start >= 0 && start < this->len) {
char* tempStr = new char[len+1];
strncpy(tempStr, str+start, len);
tempStr[len] = '\0';
String temp(tempStr);
delete [] tempStr;
return temp;
}
else {
return String();
}
}
// 替换函数
String replace(const char* oldStr, const char* newStr) const {
String temp(*this);
size_t pos = temp.str.find(oldStr);
while (pos != string::npos) {
temp.str.replace(pos, strlen(oldStr), newStr);
pos = temp.str.find(oldStr, pos+strlen(newStr)); // 避免死循环
}
return temp;
}
// 定位函数
int index(const String& s, int pos = 0) const {
size_t targetPos = str.find(s.str, pos);
if (targetPos == string::npos) {
return -1;
}
else {
return int(targetPos);
}
}
// 输出函数
friend ostream& operator<<(ostream& out, const String& s) {
out << s.str;
return out;
}
};
int main() {
String str1("Hello");
String str2("world");
String str3("Hello");
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
cout << "str1.length(): " << str1.length() << endl;
cout << "str2.length(): " << str2.length() << endl;
cout << "str1 == str2: " << (str1 == str2) << endl;
cout << "str1 == str3: " << (str1 == str3) << endl;
String str4 = str1 + str2;
cout << "str1 + str2: " << str4 << endl;
String str5 = str4.substr(2, 5);
cout << "str4.substr(2, 5): " << str5 << endl;
String str6 = str4.replace("world", "ChitGPT");
cout << "str4.replace(\"world\", \"ChitGPT\"): " << str6 << endl;
cout << "str4.index(str2): " << str4.index(str2) << endl;
cout << "str4.index(\"Lorem\"): " << str4.index("Lorem") << endl;
return 0;
}
```
该代码中包括求串长、赋值、比较、串连接、求子串、替换和定位算法等基本操作。请注意,为了避免内存泄露,需要对每个 new 操作都对应一个 delete 操作。此外,替换函数中使用了 C++11 标准库中的 string 类的相关方法,需要在编译时加上 `-std=c++11` 选项。
阅读全文