串的初始化、串的连接、求子串、串的置换、定位、子串插入、串的输出等基本操作。c++代码
时间: 2023-07-03 08:12:16 浏览: 67
以下是C++代码示例:
```c++
#include <iostream>
#include <cstring>
using namespace std;
// 定义串类
class String {
private:
char* str; // 串的存储空间
int len; // 串的长度
public:
String() { // 串的初始化
str = NULL;
len = 0;
}
String(const char* s) { // 串的初始化
len = strlen(s);
str = new char[len + 1];
strcpy(str, s);
}
~String() { // 串的销毁
if (str != NULL) {
delete[] str;
}
}
String operator+(const String& s) const { // 串的连接
String tmp;
tmp.len = len + s.len;
tmp.str = new char[tmp.len + 1];
strcpy(tmp.str, str);
strcat(tmp.str, s.str);
return tmp;
}
String SubString(int pos, int length) const { // 求子串
String tmp;
tmp.len = length;
tmp.str = new char[length + 1];
strncpy(tmp.str, str + pos, length);
tmp.str[length] = '\0';
return tmp;
}
String Reverse() const { // 串的置换
String tmp;
tmp.len = len;
tmp.str = new char[len + 1];
for (int i = 0; i < len; i++) {
tmp.str[i] = str[len - i - 1];
}
tmp.str[len] = '\0';
return tmp;
}
int Index(const String& s, int pos = 0) const { // 定位
int i = pos, j = 0;
while (i < len && j < s.len) {
if (str[i] == s.str[j]) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if (j == s.len) {
return i - j;
} else {
return -1;
}
}
String Insert(int pos, const String& s) const { // 子串插入
String tmp;
tmp.len = len + s.len;
tmp.str = new char[tmp.len + 1];
strncpy(tmp.str, str, pos);
tmp.str[pos] = '\0';
strcat(tmp.str, s.str);
strcat(tmp.str, str + pos);
return tmp;
}
friend ostream& operator<<(ostream& os, const String& s) { // 串的输出
os << s.str;
return os;
}
};
int main() {
String s1("Hello");
String s2("World");
String s3 = s1 + s2;
cout << s3 << endl; // 输出 HelloWorld
String s4 = s3.SubString(5, 5);
cout << s4 << endl; // 输出 World
String s5 = s3.Reverse();
cout << s5 << endl; // 输出 dlroWolleH
int pos = s3.Index(s4);
cout << pos << endl; // 输出 5
String s6 = s3.Insert(pos, s4);
cout << s6 << endl; // 输出 HelloWorld
return 0;
}
```
阅读全文