c语言数组问题不了解运行过程

img


这个代码是如何做到删除某个字符的?s[j++]等于s[i]是将i的值赋予给了比i大一位数的j吗?它最后只输出个s就可以了吗

逻辑就是将不是'H'的字符,放到这个数组从头开始的位置进行覆盖,最后将字符串结束符位置提前,这样字符串就只剩下非'H'字符了
比如输入"ABHCHD"
i和j都是遍历变量。都从A开始,判断A不是'H',那么A放到数组开头,也就是j表示的位置(这里实际'A'位置没有变),当检查到'H'字符时,忽略,i继续指向下一个'C'字符,检查不是'H',则放到j指向位置,j肯定指向刚才'H'的位置,这样C就替代了H位置,最后ABCD会放置到数组开头部分,再将D后面的字符改为字符串结束符。这样用%s输出的就只有ABCD了,实现'H'字符的删除效果

i j 都是字符串数组 s[] 的下标位置,刚开始时 i = j =0 是同步的,当碰到待删除的字符如 ‘H' 时,if(s[i] != 'H') 条件不满足,s[j++] = s[i] 这句就不被执行到, 相当于 j 所在的位置就暂停了一次,但 i ++ 被执行,j 和 i 就不同步了,实现了用后一个字符覆盖前一个字符的作用。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^