常遇类似这样的题目: 删除一字符串中任意指定字符。
首先要说明,设字符串存储在字符数组a中,删除字符串意味着原数组a中字符串内容发生了变化,不再含有指定的字符。
设被删除字符是ch,对该题目,可先用比较容易想到的方法来实现。
算法分两步:第一步,依次判断原字符数组a中所有字符,如不是ch,则送到b数组中,是ch,则不送。那么,b数组的前若干个字符自然是a串中除了指定字符后的剩余内容。最后,为b数组加上“\0“标记。第二步:用strcpy复制回a数组。内存示意如下:
原来a数组内容:
最后b数组复制到a数组中后,a数组内容:
可见,a数组只是对应内存中前若干个字符被覆盖,刷新成新的串内容。但由于输出字符串是遇到‘\0’则结束,那么输出a数组,自然是缩短后的字符串。
如果我们对内存的覆盖与刷新理解得比较到位,此题目实际上完全不必定义b数组,直接将a数组的有用字符保留即可。程序如下:
内存,时时刻刻变化,分分秒秒刷新。请大家自行画一画a对应内存每一次循环的刷新情况与k下标的变化情况。
领取专属 10元无门槛券
私享最新 技术干货