链串实现建串、输入串、输出串、插入串、删除串、取子串、串连接、 串替换、求串长等。程序设计
时间: 2023-08-09 16:10:45 浏览: 80
以下是一个简单的链串实现,包含建串、输入串、输出串、插入串、删除串、取子串、串连接、串替换、求串长等操作。具体实现如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
// 链串结构体
struct StringNode {
char data;
StringNode *next;
};
// 建立链串
void CreateString(StringNode *&s, char str[]) {
int len = strlen(str);
s = new StringNode;
StringNode *p = s;
for (int i = 0; i < len; i++) {
p->data = str[i];
if (i == len - 1) {
p->next = NULL;
} else {
p->next = new StringNode;
p = p->next;
}
}
}
// 输入链串
void InputString(StringNode *&s) {
char str[100];
cout << "请输入字符串:";
cin >> str;
CreateString(s, str);
}
// 输出链串
void OutputString(StringNode *s) {
StringNode *p = s;
while (p != NULL) {
cout << p->data;
p = p->next;
}
cout << endl;
}
// 插入链串
void InsertString(StringNode *&s, int pos, char str[]) {
int len = strlen(str);
StringNode *p = s;
for (int i = 0; i < pos - 1 && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
return;
}
for (int i = 0; i < len; i++) {
StringNode *q = new StringNode;
q->data = str[i];
q->next = p->next;
p->next = q;
p = p->next;
}
}
// 删除链串
void DeleteString(StringNode *&s, int pos, int len) {
StringNode *p = s;
for (int i = 0; i < pos - 2 && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
return;
}
StringNode *q = p->next;
for (int i = 0; i < len && q != NULL; i++) {
p->next = q->next;
delete q;
q = p->next;
}
}
// 取子串
void SubString(StringNode *s, int pos, int len, StringNode *&sub) {
StringNode *p = s;
sub = new StringNode;
StringNode *q = sub;
for (int i = 0; i < pos - 1 && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
return;
}
for (int i = 0; i < len && p != NULL; i++) {
q->data = p->data;
if (i == len - 1) {
q->next = NULL;
} else {
q->next = new StringNode;
q = q->next;
}
p = p->next;
}
}
// 串连接
void ConcatString(StringNode *&s1, StringNode *s2) {
StringNode *p = s1;
while (p->next != NULL) {
p = p->next;
}
p->next = s2;
}
// 串替换
void ReplaceString(StringNode *&s, char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
StringNode *p = s;
while (p != NULL) {
if (p->data == str1[0]) {
bool flag = true;
StringNode *q = p->next;
for (int i = 1; i < len1 && q != NULL; i++) {
if (q->data != str1[i]) {
flag = false;
break;
}
q = q->next;
}
if (flag && q != NULL) {
StringNode *r = new StringNode;
r->data = str2[0];
r->next = q;
p->next = r;
for (int i = 1; i < len2; i++) {
r->next = new StringNode;
r = r->next;
r->data = str2[i];
}
p = r;
}
}
p = p->next;
}
}
// 求串长
int StringLength(StringNode *s) {
StringNode *p = s;
int len = 0;
while (p != NULL) {
len++;
p = p->next;
}
return len;
}
int main() {
StringNode *s = NULL;
InputString(s);
OutputString(s);
InsertString(s, 3, "abc");
OutputString(s);
DeleteString(s, 5, 3);
OutputString(s);
StringNode *sub = NULL;
SubString(s, 2, 4, sub);
OutputString(sub);
StringNode *s2 = NULL;
CreateString(s2, "def");
ConcatString(s, s2);
OutputString(s);
ReplaceString(s, "ab", "xyz");
OutputString(s);
cout << StringLength(s) << endl;
return 0;
}
```
这个程序实现了链串的建立、输入、输出、插入、删除、取子串、串连接、串替换、求串长等操作。可以根据实际需要进行修改和扩展。