user-0 提问: 跪求大佬，字符串中删除一个特定字符

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 复杂化了 定义SRC[]记录处理前的字符串 定义DST[]记录处理后的字符串 然后将不等于要删除的字符，依次copy到dst字符数组里就可以了

user: user-0
content: 引用 9 楼 寻开心的回复: 好好看看代码好不。  看了半天理解你的代码，理解你的思路，沿着你的思路把解决问题了， 然后你还要把自己带沟里去  注释掉k=k+1， 是因为按照你的思路这样计数是无效的，理由前面已经给你解释了  补充上去的那三行代码， 解决了一个问题，就是当你已经把字符串互换到最后的若干个都是要删除的数据的时候，可互换的非要删除字符是字符串的结尾， 而p就是字符串结尾的序号， 所以p-b就是一共有一个要删除的字符串  直接计算得到了结果， 还循环计数个鬼啊   此外，倒数第二行的那个 c[v-k] = '\0' 那一行在这个修正的代码下也是多余的 因为字符串结尾已经被互换过去了。 大佬，彻底明白了，万分感谢，麻烦您了

user: user-3
content: 好好看看代码好不。  看了半天理解你的代码，理解你的思路，沿着你的思路把解决问题了， 然后你还要把自己带沟里去  注释掉k=k+1， 是因为按照你的思路这样计数是无效的，理由前面已经给你解释了  补充上去的那三行代码， 解决了一个问题，就是当你已经把字符串互换到最后的若干个都是要删除的数据的时候，可互换的非要删除字符是字符串的结尾， 而p就是字符串结尾的序号， 所以p-b就是一共有一个要删除的字符串  直接计算得到了结果， 还循环计数个鬼啊   此外，倒数第二行的那个 c[v-k] = '\0' 那一行在这个修正的代码下也是多余的 因为字符串结尾已经被互换过去了。

user: user-0
content: 引用 7 楼 寻开心的回复:  注释掉一行语句 /*   */  是注释掉一大段语句 // 注释掉一行语句 就是把计数器取消，然后可以交换完之后，在循环计数？这样理解？   不好意思，我以为双斜杠有什么新的用法

user: user-3
content: 注释掉一行语句 /*   */  是注释掉一大段语句 // 注释掉一行语句

user: user-0
content: 引用 4 楼 寻开心的回复:你这个算法的想法是把要删除的字符和后面第一个非删除字符交换  但是有两个问题 第一个， 你没有判断后面一串都是要删除的情况， 这个时候第一个非删除字符是字符串结尾'\0'                你会把当前的要删除字符和字符串结尾交换了， 然后去判断下一个字符了， 这就导致循环无限向后推移，最后内存越界错误  第二个， 举例说明  mya 三个字符的字符串，假如要删除m                第一次进来 发现m了k=1， 交换后，字符串是yma               再次进入循环，有一次发现m， k=2，....               再进来 k=3， .....    所以你的k计数器是无效的  修改办法，  for(b=0; c[b]!='\0'; b++)     {         if(c[b]==s)         {             // k = k + 1;             for(p=b;c[p]==s;p++)             {             }             f=c[b];             c[b]=c[p];             c[p]=f;        if ( c[b] == '\0') {                 k = p - b;                 break;             }         }     } 对了请问大佬，那两个//是什么用的？

user: user-0
content: 引用 4 楼 寻开心的回复:你这个算法的想法是把要删除的字符和后面第一个非删除字符交换  但是有两个问题 第一个， 你没有判断后面一串都是要删除的情况， 这个时候第一个非删除字符是字符串结尾'\0'                你会把当前的要删除字符和字符串结尾交换了， 然后去判断下一个字符了， 这就导致循环无限向后推移，最后内存越界错误  第二个， 举例说明  mya 三个字符的字符串，假如要删除m                第一次进来 发现m了k=1， 交换后，字符串是yma               再次进入循环，有一次发现m， k=2，....               再进来 k=3， .....    所以你的k计数器是无效的  修改办法，  for(b=0; c[b]!='\0'; b++)     {         if(c[b]==s)         {             // k = k + 1;             for(p=b;c[p]==s;p++)             {             }             f=c[b];             c[b]=c[p];             c[p]=f;        if ( c[b] == '\0') {                 k = p - b;                 break;             }         }     } 感谢大佬，万分感谢，明白了

user: user-3
content: 你这个算法的想法是把要删除的字符和后面第一个非删除字符交换  但是有两个问题 第一个， 你没有判断后面一串都是要删除的情况， 这个时候第一个非删除字符是字符串结尾'\0'                你会把当前的要删除字符和字符串结尾交换了， 然后去判断下一个字符了， 这就导致循环无限向后推移，最后内存越界错误  第二个， 举例说明  mya 三个字符的字符串，假如要删除m                第一次进来 发现m了k=1， 交换后，字符串是yma               再次进入循环，有一次发现m， k=2，....               再进来 k=3， .....    所以你的k计数器是无效的  修改办法，  for(b=0; c[b]!='\0'; b++)     {         if(c[b]==s)         {             // k = k + 1;             for(p=b;c[p]==s;p++)             {             }             f=c[b];             c[b]=c[p];             c[p]=f;        if ( c[b] == '\0') {                 k = p - b;                 break;             }         }     }

user: user-4
content: 引用 2 楼 weixin_46140402的回复:[quote=引用 1 楼 weixin_46138835的回复:]删除字符的话只需要找到字符后从后往前覆盖就可以了，你中间把字符交换，其实没有必要 如果是几个相同的字符在一起的话，后边的往前覆盖会不会不行？[/quote] 可以啊，如果这个字符不是被删除字符的话，他们就都往前移动一格，如果是的话，会被for语句执行多次，每次删掉一个字符。

user: user-0
content: 引用 1 楼 weixin_46138835的回复:删除字符的话只需要找到字符后从后往前覆盖就可以了，你中间把字符交换，其实没有必要 如果是几个相同的字符在一起的话，后边的往前覆盖会不会不行？

user: user-4
content: 删除字符的话只需要找到字符后从后往前覆盖就可以了，你中间把字符交换，其实没有必要