怎么在C语言中实现字符串左旋和右旋

  介绍

怎么在C语言中实现字符串左旋和右旋?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强> 1。实现一个函数,可以左旋字符串中的k个字符。

ABCD左旋一个字符得到BCDA

, ABCD左旋两个字符得到CDAB

<强>,1。暴力移位法

# include  & lt; stdio.h>   # include  & lt; stdlib.h>   # include  & lt; string.h>   void  left_move (char * str, int  k)   {   int 才能;len =, 0;   int 才能;小姐:=,0;   while 才能;(k,)   {才能   ,,,//1。把第一个保存起来   ,,,char  tmp =, * str;   ,,,//2。后面的向后移动   ,,,len =, strlen (str);   ,,,for (小姐:=,0;,小姐:& lt;, len;,我+ +)   ,,,{   ,,,,,* (+ str  i),=, * (+ str  1, +, i);   ,,,}   ,,,//3。把保存的数据放在最后一位   ,,,* (+ str  len 作用;1),=,tmp;   ,,}   }   int  main ()   {   char 才能arr [],=,“ABCD";   int 才能;n =, 0;   ,,printf(“请输入左旋位数:“);   scanf_s才能(“% d",,, n);   left_move才能(加勒比海盗,n);   ,,printf (“% s “, arr);   系统才能(“pause");   return 才能;0;   }

<强> 2。三步翻转法

# include  & lt; stdio.h>   # include  & lt; stdlib.h>   # include  & lt; string.h>   # include  & lt; assert.h>   void 反向(char  *左,,char *,右)   {   维护才能(left&,右);//断言   while 才能;(left  & lt;,右)   {才能   ,,,char  tmp =, *左;   ,,,* left =, *正确;   ,,,* right =, tmp;   ,,,左+ +;   ,,,,,   ,,}   }   void  left_move (char * str, int  k)   {   int 才能;len =, strlen (str);   反向才能(str, str  +, k 作用;1);//逆序前半部分   反向才能(str + k, str  +, len 作用;1);//逆序后半部分   反向才能(str, str +, len 作用;1);//逆序整个字符串   }   int  main ()   {   char 才能arr [],=,“ABCD";   int 才能;n =, 0;   ,,printf(“请输入左旋位数:“);   scanf_s才能(“% d",,, n);   left_move才能(加勒比海盗,n);   ,,printf (“% s “, arr);   系统才能(“pause");   return 才能;0;   }

<强> 2。实现一个函数,可以右旋字符串中的k个字符。

ABCD右旋一个字符得到DABC

, ABCD右旋两个字符得到CDAB

<强> 1。暴力移位法

# include  & lt; stdio.h>   # include  & lt; stdlib.h>   # include  & lt; string.h>   void  right_move (char *, p, int  k)   {   ,int  len =, strlen (p);   ,for  (int 小姐:=,0;,小姐:& lt;, k,, + + i)//控制旋转次数   ,{   ,,char  tmp =, p (len 作用;1);   ,,for  (int  j =, len 作用;1;,j 祝辞,0;,- j)//完成一次旋转   ,,{   ,,,,p [j],=, p (j 作用;1);   ,,}   ,,p [0],=, tmp;   ,}   }   int  main ()   {   char 才能arr [],=,“ABCD";   int 才能;n =, 0;   ,,printf(“请输入右旋位数:“);   scanf_s才能(“% d",,, n);   right_move才能(加勒比海盗,n);   ,,printf (“% s “, arr);   系统才能(“pause");   return 才能;0;   }

<强> 2。三步翻转法:先把字符串整体逆序,然后分别是前半部分逆序和后半部分逆序或者

先是后半部分逆序,接下来是前半部分逆序,最后再整体逆序都可以

具体代码如下:

# include  & lt; stdio.h>   # include  & lt; stdlib.h>   # include  & lt; string.h>   # include  & lt; assert.h>   void 反向(char  *左,,char *,右)   {   维护才能(left&,右);//断言   while 才能;(left  & lt;,右)   {才能   ,,,char  tmp =, *左;   ,,,* left =, *正确;   ,,,* right =, tmp;   ,,,左+ +;   ,,,,,   ,,}   }   void  right_move (char * str, int  k)   {   int 才能;len =, strlen (str);   反向才能(str, str  +, len-k  1);//逆序前半部分   反向才能(str + len-k, str  +, len 作用;1);//逆序后半部分   反向才能(str , str  +, len 作用;1);//逆序整个字符串   反向才能(str, str  +, len 作用;1);//逆序整个字符串   反向才能(str, str  +, k 作用;1);//逆序前半部分   反向才能(str + k, str  +, len 作用;1);//逆序后半部分   }   int  main ()   {   null   null   null   null   null   null   null   null   null

怎么在C语言中实现字符串左旋和右旋