删除串s1中所有s2字串
特别注意的如下图

caabcbc 删除 abc 后 cabc 仍有 abc 显然 还得 删除 abc结果为 c。
然后 向前 覆盖 子串 一样的 长度,覆盖结束(删除),末尾也 清零 子串一样 的长度
删除串s1中所有s2字串
code:
/*
删除串s1中所有s2字串
*/#include
#include //打印
void prin_array(char a[])
{for(int i = 0;a[i] != '\0';i ++){printf("%c",a[i]);}printf("\n"); return;
}//找到在子串在主串的位置,传入 两个 数组 变量, 进行 遍历比对
int index(char a[],char b[])
{//如果 传入的 数组 不符合 要求,直接 返回 if( *a == '\0' && b[0] == '\0' ){return -1;}//j 用来 保存 字串 int j = 0;for(int i = 0;a[i] != '\0';i ++){if(a[i] == b[0]){for(j = 0;b[j] != '\0' && a[i + j] != '\0';j ++){if(b[j] != a[i + j])//字串 和 主串 对比 {break;}}//说明 字串 已经遍历 到尾了,配对成功 if(b[j] == '\0'){return i;}}}return -1;
}void delete_Son(char a[],char b[])
{int len_b = strlen(b);//获取 子串 长度 int flag = 0;int len_a = strlen(a);//获取 主串 长度 char c[len_a] = {0};//用来 保存 主串 的值 strcpy(c,a);//把a值 赋值在c中,给 c 便于修改 prin_array(a);prin_array(b);while(1){flag = index(c,b);if(flag == -1){break;}int i = flag;//当然 覆盖 后 的数组 也必须 保证 没有 子串 for(i = flag;i < len_a - len_b;i ++)//往前 覆盖(代替删除)如:abcdfg -> dfgdfg{c[i] = c[i + len_b];//i + len_b + 1 = len_a -> i < len_a -lenb}for(int j = i;c[j] != '\0';j ++)//向前移动成功,然后再把末尾清空个数 为子串长度 的元素:dfgdfg -> dfg'\0''\0''\0'{c[j] = '\0';}}//打印 结果字符数组prin_array(c);return;
}int main()
{//测试 主串 和 字串 char *a = "caabcbcfabccabcccxdsa";//主串 char *b = "abc";//等价于 b[3] = {'a','b','c'},但前者 不能修改其中某个元素,只能整体修改,查看,后者方便修改 delete_Son(a,b);return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
