字符串的左旋转操作,c字符串旋转编程
前言,请看这个问题。需要自己旋转字符串,旋转几个字符自己指定。这是一个基本的题型。我这里有三个解决方案。接下来,我将通过绘图和编码来解释第一种解决方案。标题如下:
正如你所看到的,字符ABCD在旋转后变成了BCDA。
如图所示:
这是第一种解法的一般过程。接下来,我将向你解释如何练习串交换:
#include stdio.h //字符串字符旋转# includeassert.h void冒泡(char * arr,intsz,intn){ assert(arr);int I=0;int j=0;for(I=0;I I){ char tmp=0;for(j=0;j SZ-1;j){ tmp=arr[j];arr[j]=arr[j 1];arr[j 1]=tmp;} } } void print(char * arr){ printf( % s \ n ,arr);} int main(){ char arr[]= ABCD ;int SZ=sizeof(arr)/sizeof(arr[0])-1;int n=0;Printf(请输入兑换次数\ n );while (~scanf(%d ,n)) { bubbling(arr,sz,n);//使用冒泡交换实现字符旋转打印(arr);Printf(请输入兑换次数\ n );}返回0;}这是我写的一个交换代码,用数组交换。你可以看看。下面是一个一个交换数组的方法。其实原理和冒泡排序一样,就是一个外循环,一个内循环。外部循环负责控制旋转的字节数。如果我们的n输入为1,则旋转一次,如果为2,则旋转两次。接下来,我们将解释内部循环。
如你所见,我们的arr[0]首先与arr[1]交换,然后是arr[1]和arr[2]的相互交换。你会觉得冒泡排序也是一个一个交换的,但是冒泡排序比这个多了一个判断条件。如果是升序的话,只有第一个元素大于第二个元素的时候才能交换,但这不是必须的。你只需要完成交换,如图。
这里的第一个参数是字符串第一个元素的地址,第二个参数是字符串中的字符数(不包括/0),第三个参数是我们自己输入的要旋转的字符数。
大家可以看到,紫框是外圈,用来判断交换了多少字符,内圈是红框。我们设置一个变量tmp来接收我们arr[j]的值,然后我们把arr[j]的值换成arr[j 1]的值,这样循环交换。因为我们有四个字符,所以需要交换三次,如图。
所以我们的判断条件是sz-1。(我们注意到sizeof(arr)在计算字符串大小时会再次计算 \0 ,所以最后要进行-1运算,这样我们的sz就是我们的字符数。)因为sz-1表示我们受制于这个抽签,当我有四个字符时,我们需要交换三次,因为J从0开始。
当我输入1时,旋转一次,就变成了如图所示的字符串。当然,我之前说过,交换的字符数是由N控制的,如果N为2,则交换两个字符,如图所示:
你可以看到ab已经旋转到后面了,从abcd到cdab。
好了,这大概就是第一种解法的解释了。接下来我会在后续补充第二种写法。我个人推荐第二种写法,所以这次就这样了。可以给个赞,作为对新人的支持!
谢谢大家!
,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。