编写算法,实现顺序串的基本操作strreplace(&s,t,v),c语言
时间: 2024-02-18 08:02:24 浏览: 84
串的基本算法
下面是实现顺序串的基本操作strreplace(&s,t,v)的C语言代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int length;
} SqString;
void InitString(SqString *s, char *str) {
int i = 0;
while (str[i] != '\0') {
s->data[i] = str[i];
i++;
}
s->length = i;
}
void PrintString(SqString s) {
int i;
for (i = 0; i < s.length; i++) {
printf("%c", s.data[i]);
}
printf("\n");
}
int StrReplace(SqString *s, char *t, char *v) {
int i, j, k, len1, len2, len3, count = 0;
char *p, *q;
len1 = strlen(s->data);
len2 = strlen(t);
len3 = strlen(v);
for (i = 0; i < len1 - len2 + 1; i++) {
p = s->data + i;
j = 0;
while (j < len2 && *(p + j) == *(t + j)) {
j++;
}
if (j == len2) {
count++;
q = (char *)malloc((len1 + len3 - len2 + 1) * sizeof(char));
strncpy(q, s->data, i);
q[i] = '\0';
strcat(q, v);
k = i + len2;
strcat(q, s->data + k);
strcpy(s->data, q);
s->length = strlen(s->data);
free(q);
}
}
return count;
}
int main() {
SqString s;
char str[MAXSIZE], t[MAXSIZE], v[MAXSIZE];
int count;
printf("请输入原字符串:");
gets(str);
InitString(&s, str);
printf("请输入要替换的子串:");
gets(t);
printf("请输入替换后的子串:");
gets(v);
count = StrReplace(&s, t, v);
printf("替换后的字符串为:");
PrintString(s);
printf("一共进行了%d次替换\n", count);
return 0;
}
```
说明:
- `SqString`是顺序串的类型定义,包括串的字符数组`data`和长度`length`。
- `InitString`函数用于初始化顺序串,将字符数组赋值给`data`,计算长度赋值给`length`。
- `PrintString`函数用于打印顺序串。
- `StrReplace`函数实现替换操作,其中`p`和`q`是指向字符数组的指针,`j`用于比较子串和主串,`count`记录替换次数,`strncpy`和`strcat`函数用于拼接字符串,`free`函数用于释放内存。
- `main`函数中输入原字符串、要替换的子串和替换后的子串,调用`StrReplace`函数进行替换,输出替换后的字符串和替换次数。
阅读全文