#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;
}
C语言:从字符串中删除子串

原文地址: https://www.cveoy.top/t/topic/otdF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录