计算思维训练——内存的覆盖与刷新

常遇类似这样的题目: 删除一字符串中任意指定字符。

首先要说明,设字符串存储在字符数组a中,删除字符串意味着原数组a中字符串内容发生了变化,不再含有指定的字符。

设被删除字符是ch,对该题目,可先用比较容易想到的方法来实现。

算法分两步:第一步,依次判断原字符数组a中所有字符,如不是ch,则送到b数组中,是ch,则不送。那么,b数组的前若干个字符自然是a串中除了指定字符后的剩余内容。最后,为b数组加上“\0“标记。第二步:用strcpy复制回a数组。内存示意如下:

原来a数组内容:

最后b数组复制到a数组中后,a数组内容:

可见,a数组只是对应内存中前若干个字符被覆盖,刷新成新的串内容。但由于输出字符串是遇到‘\0’则结束,那么输出a数组,自然是缩短后的字符串。

如果我们对内存的覆盖与刷新理解得比较到位,此题目实际上完全不必定义b数组,直接将a数组的有用字符保留即可。程序如下:

内存,时时刻刻变化,分分秒秒刷新。请大家自行画一画a对应内存每一次循环的刷新情况与k下标的变化情况。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180527G1C56M00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券