字符串的左旋转操作,回旋字符串
大家好。今天给大家带来的是旋转弦的第二种解法,包括第三种解法(通过库函数快速实现)。
正文简单介绍了一下我提到的弦旋转的成品,然后以绘图的形式展示给大家:
最上面是我们输入的字符串,最下面是我们想要得到的字符串。旋转字符串一次,将第一个字符旋转到最后一个字符。之前讲过第一个版本,链接在这里供大家参考。我不会在这里解释第一种解决方案[https://blog.51cto.com/u_15723046/5687002]
代码如上,
好了,下面我们来解释一下第二种解决方案:
我把第一个元素放入存储,然后下面的字符依次向前旋转:
第一次旋转后:
你也可以这么看,
取出第一个字符,然后逐渐向前覆盖下面的字符,
这样的话,这样做的话,效率会比第一种更快,交换的次数也会减少。让我给你看看代码:
上面的n是要旋转的字符数,下面的sz-1是要交换的次数。为什么用sz-1?因为下面是设置arr[j]=arr[j 1];
如果j=sz-1,那么j 1=sz就会出界,而且由于arr[j 1]对应的值正好是j 1==sz-1时的最后一个字符,将最后一个字符赋给前一个字符可以停止循环,又由于我们只需要交换sz-1次,所以以图片为例,我们四个角色只轮换了三次。
这里的橙色框是存储第一个字符的地方,数组arr[0]在里面。因为如果是I,虽然第一次是0,第二次是1,但是每次交换第一个元素,我们只是把第一个字符赋给了char变量。
看下面的橙色方框,就是把第一个字符复制到最后一个字符,因为
因为j sz-1,当j为sz-2时,退出循环,但是执行最后一次j。现在,即使j的值是sz-1,它也只是恰好是最后一个字符的下标。我们将第一个元素赋给最后一个字符,这样就完成了一个循环。但是,如果用上面的n来判断次数的话,如果你想交换两个字符,你只要把n输入2就可以了,仅此而已。整整两次。最后,我们返回str的地址。其实arr地址是可以的,但是我习惯这样写,因为如果字符串涉及到地址的运算,会改变第一个地址的位置。
好了,这一次,我们已经解释完了字符交换的第二种解决方案。如果看完之后觉得有所收获,那将是我最大的感动!
再见!
,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。