1. 程式人生 > >實現一個函式,可以左或右旋字串中的k個字元。 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB。

實現一個函式,可以左或右旋字串中的k個字元。 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB。

1.實現一個函式,可以左旋字串中的k個字元。 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB 思路: 把左移的字母先儲存,然後使後邊的字母依次前移,最後把剛才儲存的左移字元賦值後邊空了的下標中

#define use _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <stdlib.h>
# include <string.h>

void left_rotate (char *arr,int sz,int k)     //自定義左旋轉函式
{     
	  int i=0;
	  k=k%sz;               //為了防止旋轉超過字串長度
	  while (k--)            //判斷需要左移字元是否左移完
	{  
	  char temp=arr[0];       //每次把首值儲存在臨時變數中
	  for (i=0;i<sz-1;i++)    
	  {
		  arr[i]=arr[i+1];     //讓字串中內容下標依次前移
	  }
	  arr[i]=temp;         //把剛儲存的值賦給後邊下標空了的
    }
}
int main ()         
{ 
  int k=0;                 
  char arr[]="ABCDEFG";
  printf ("請輸入任意數字: ");   //左旋轉幾個字母
  scanf ("%d",&k);
  left_rotate (arr,(sizeof arr/sizeof arr[0]-1),k);  //呼叫函式
  printf ("%s\n",arr);
  system ("pause");
  return 0;
}

1.實現一個函式,可以右旋字串中的k個字元。 ABCD右旋一個字元得到DABC ABCD右旋兩個字元得到CDAB 思路:把右移的字母先儲存,然後使前邊的字母依次後移,最後把剛才儲存的右移字元賦值前邊空了的下標中,與左移思路相同

#define use _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
void right_rotate ( char *arr,int sz,int k)
{
	  int i=0;
	  k=k%sz;
  while (k--)
 	{  
  char temp=arr[sz-1];        //每次把末尾值儲存在臨時變數中
	  for (i=sz-1;i>0;i--)        
	  {
		  arr[i]=arr[i-1];      //讓字串中內容下標依次後移
	  }
	  arr[i]=temp;    //把剛儲存的值賦給前邊下標空了的
  }
}
int main ()
{ 
  int k=0;
  char arr[]="ABCDEFG";
  printf ("請輸入任意數字: ");
  scanf ("%d",&k);
 right_rotate (arr,(sizeof arr/sizeof arr[0]-1),k);
 printf ("%s\n",arr);
  system ("pause");
  return 0;
}

ABCD左旋兩個字元得到CDAB,ABCD右旋兩個字元得到CDAB,由此可得出一個旋轉的字母,通過左旋或者右旋 不同次數都可得到。