已知字符串S采用顺序存储结构,设计一个算法,从S中删除所有与串T相同的子串。C语言
时间: 2023-06-19 13:09:20 浏览: 135
假设S和T的长度分别为n和m,首先我们可以用一个循环遍历S的每个字符,同时用一个指针p记录当前位置,接着用另一个循环来判断S中p位置开始的子串是否与T匹配,如果匹配则将该子串从S中删除。
具体实现如下:
```c
void delete_substring(char *S, char *T) {
int n = strlen(S);
int m = strlen(T);
int i, j, k;
int flag; // 用于标记是否匹配成功
for (i = 0; i < n; i++) {
j = i;
k = 0;
flag = 1;
while (k < m && j < n) {
if (S[j] == T[k]) {
j++;
k++;
} else {
flag = 0;
break;
}
}
if (flag && k == m) { // 匹配成功,删除子串
for (j = i; j < n - m; j++) {
S[j] = S[j + m];
}
S[j] = '\0';
n -= m;
i--; // 因为删除了子串,需要将指针回退一步
}
}
}
```
这里的思路是,对于每个字符,都从该位置开始,逐个匹配T中的字符,如果匹配成功,则从S中删除该子串。由于删除操作会导致字符串长度的变化,因此需要记录当前的字符串长度,并在删除子串后更新该长度。
阅读全文