C语言:从字符串中删除子串
#include <stdio.h>
#include <string.h>
#define MAXLEN 100
int main() {
char str[MAXLEN], sub[MAXLEN];
int len_str, len_sub, i, j, k, flag;
// 读入字符串和子串
fgets(str, MAXLEN, stdin);
fgets(sub, MAXLEN, stdin);
len_str = strlen(str);
len_sub = strlen(sub);
// 去除字符串和子串末尾的换行符
if (str[len_str-1] == '\n') str[len_str-1] = '\0';
if (sub[len_sub-1] == '\n') sub[len_sub-1] = '\0';
// 删除子串
flag = 0; // 标记是否有子串被删除
for (i = 0; i < len_str; i++) {
if (str[i] == sub[0]) { // 找到子串的第一个字符
for (j = i, k = 0; k < len_sub; j++, k++) {
if (str[j] != sub[k]) break; // 子串匹配失败
}
if (k == len_sub) { // 子串匹配成功
flag = 1;
for (j = i; j < len_str - len_sub; j++) {
str[j] = str[j+len_sub];
}
len_str -= len_sub;
i -= len_sub; // 注意,删除子串后要将i回退len_sub步
}
}
}
// 输出结果
if (flag) printf('%s\n', str);
else printf('%s\n', str);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/otdF 著作权归作者所有。请勿转载和采集!