實現一個函式,可以左或右旋字串中的k個字元。 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB。
阿新 • • 發佈:2018-12-19
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,由此可得出一個旋轉的字母,通過左旋或者右旋 不同次數都可得到。