初夏小談:字串的旋轉
阿新 • • 發佈:2018-11-25
由於字串問題是比較混亂的一個問題,今天來說說字串中的旋轉問題。
求旋轉Ñ次後的字串
1.實現一個函式,可以左旋字串中的k個
字元.ABCD左旋一個字元得到BCDA
ABCD左旋兩個字元得到CDAB
#include<Aventador_SQ.h> void ZuoXuan(char arr[],int num,int k) { int i = 0; int j = 0; char temp; while (i < k) { temp = arr[0]; for (j = 1; j < num; j++)//迴圈移動字串的位置 { arr[j-1]= arr[j]; if (j == num - 1) { arr[j] = temp; } } //arr[j] = temp; i++; } //for (i = 0; i < num; i++) //{ // printf("%c", arr[i]); //} //printf("\n"); printf("%s\n", arr); } int main() { int k = 0; int num = 0; char arr[100]; scanf("%s", arr); num = strlen(arr); printf("請輸入需要左旋的個數:"); scanf("%d", &k); ZuoXuan(arr,num,k); system("pause"); return 0; }
判斷是否為旋轉字串
2.判斷一個字串是否為另外一個字串旋轉之後的字串。
例如:給定s1 = AABCD和s2 = BCDAA,返回1,給定s1 = abcd和s2 = ACBD,返回0。
#include<Aventador_SQ.h> int IsXuan(char arr1[], int num1, char arr2[], int num2) { int row = 0; int i = 0; int j = 0; char temp;//用於記錄儲存第一個字元 if (num1 != num2) { return 0; } else { //左旋與右旋順序相同(左旋一個相當於右旋num1-1個) //判斷左旋的情況 for (row = 1; row < num1; row++)//逐次比較旋轉次數 { for (i = 0;i < row;i++)//旋轉的字元數的次數 { temp = arr2[0]; for (j = 1; j < num1; j++)//迴圈移動字串的位置 { arr2[j - 1] = arr2[j]; if (j == num1 - 1) { arr2[j] = temp; } } for (j = 0; j < num1; j++) { if (arr1[j] == arr2[j]) { if (j == num1 - 1) { return 1; } } } } } } return 0; } int main() { int num1 = 0;//記錄輸入第一條字串的長度 int num2 = 0;//記錄第二條字串的長度 int num = 2;//用來接收返回值 char arr1[100]; char arr2[100]; printf("請輸入字串1:"); scanf("%s", arr1); printf("請輸入字串2:"); scanf("%s", arr2); num1 = strlen(arr1);//求取字串的長度 num2 = strlen(arr2); num = IsXuan(arr1, num1, arr2, num2); if (num == 1) { printf("是旋轉字串\n"); } else { printf("不是旋轉字串\n"); } system("pause"); return 0; }
如果有更好的建議或意見請新增博主QQ2630420233,博主在此感謝大家。
珍&原始碼