C语言编写函数从串s中删除所有与串t相同的子串
时间: 2024-02-18 08:02:35 浏览: 43
可以编写一个函数,实现从串s中删除所有与串t相同的子串的功能。具体实现方法如下:
```c
void deleteSubstr(char *s, const char *t) {
int len_s = strlen(s);
int len_t = strlen(t);
int i = 0, j = 0, k = 0;
while (i < len_s) {
if (s[i] == t[j]) {
j++;
if (j == len_t) {
// 匹配成功,删除子串
for (int m = i - len_t + 1; m <= k; m++) {
s[m] = s[m + len_t];
}
k = k - len_t;
i = k;
j = 0;
}
} else {
k = i;
j = 0;
}
i++;
}
}
```
该函数的输入参数是指向两个字符数组的指针,分别代表原始串s和目标串t。函数首先计算两个串的长度,然后使用三个变量i、j、k分别记录遍历s串时的位置、匹配t串时的位置和上一个匹配成功的位置。遍历s串的过程中,如果当前字符匹配t串的字符,则j自增,如果j等于len_t,说明匹配成功,此时将子串删除,即将k到i-len_t+1的字符向左移动len_t个位置,然后将k移动到i-len_t+1的位置,同时将i和j重置为k和0。如果当前字符不匹配t串的字符,则将k移动到i的位置,同时重置j为0。最后遍历完s串后,函数就可以实现从s串中删除所有与t串相同的子串的功能了。