c語言 陣列中字串的旋轉(左旋)(右旋)

2021-08-21 20:39:58 字數 1602 閱讀 6956

在陣列中定義乙個字串,該字串由「 abcdef 」 組成,所謂左旋即是讓左邊的第乙個字元旋轉到右邊去,左旋乙個字元即是產生「 bcdefa 」這樣的字串,右旋與之相反。

為了控制左(右)旋的字元數,需要製作乙個可以改變旋轉字元數的函式。

字串的旋轉的主要si思想是將需要尋轉的字元先進行儲存,然後將剩餘的不需要旋轉的字元移位,將需要旋轉的字元的位置取代,為旋轉的字元留下足夠的空間來儲存旋轉字元。所以先建立乙個陣列,將旋轉字元儲存在內,然後將原陣列內的元素移位後面的元素取代其前面的元素,但萬不可將 " \0 " 移動或取代,要始終保證 " \0 " 在其原來的位置,然後將所儲存的元素再次賦值到原陣列中,完成旋轉。最後再將陣列元素迴圈列印在螢幕上。

#includeint main()

for (i = 0; arr1[i + sz] != '\0'; i++)

int j = 0;

for (j = 0; j < sz; j++)

for (i = 0; arr1[i] != '\0'; i++)

system("pause");

return 0;

}

右旋與左旋相反,但右旋的邏輯較難,在右旋中,先要計算原陣列的元素個數,為後面的邏輯推導建立基礎。

右旋的陣列從最右端的元素開始儲存時,一定要跳過 " \0 " 然後進行拷貝儲存,而所得到的sz是整個陣列的長度,當

" sz-1 ",時所得到的yuan元素是指向 " \0 " 的·,這時再根據你要需要的旋轉個數進行旋轉,而在儲存完成後,則要將原陣列的元素進行移位,在這時,迴圈的判斷條件是最大的移位次數,比如原有"abcdef"六個元素,而你需要旋轉兩個,則就要將剩下的四個元素移位四次。移位的次數是不會有多餘的元素進行交換,然後移位時是將前面的元素將後移動:[sz - 1-1 - as - i]

這個表示式表示的是陣列前面的元素,[sz - 1-1 - i],這個表示式表示的是後面的元素,將前面的元素賦值到後面的位置處,將原來的位置清理出來為所要旋轉的元素的儲存做準備。zhi'之後再將旋轉的元素按照位置一 一賦值到原陣列準備的位置處,完成旋轉,然後迴圈列印在螢幕上。

#includeint main()

for (i = 0;i!=sz-1-as;i++)

int j = 0;

i = 0;

for (j = 0; j 以上的兩種方法叫做暴力旋轉法,這種旋轉的方法效率比較低,為了提高效率,可以用三部旋轉法。三部移位就是利用巧字元元素中間的轉換,只用三次就將字串完成旋轉,如果想要移位三個字元,第一步:就先將前(後)三個字元進行倒位,第二部:將剩下的字元進行倒位,第三部:將所有的字元進行倒位,就得到了移位後的字串。這種方法的思想是 乙個字串如果倒位了兩次,就相當於沒有進行倒位,所以最後得到的 子 字串的的字元順序並未發生改變,而 總 的字串的順序發生了改變,使字串的旋轉變得簡單高效。以下是**示例(左旋);(認真閱讀注釋,有具體過程的解析)

#include#includevoid eloopmove(char *lift,char* right)//這是將字串進行倒位的函式

}void loopmove(char *arr, int as,int i)

int main()

C 左旋轉字串

問題描述 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部,如把字串 abcd 左旋轉 2 位得到字串 cdab 請實現字串左旋轉的函式。演算法分析 1.暴力移位法 a 把最後乙個字元取出並儲存起來,然後z最後乙個字元前面的所有字元後移,b 儲存的最後乙個字元存放到第乙個字元的位置,c ...

左旋轉字串

題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 思想 旋轉三次 include include using namespace std v...

左旋轉字串

package com.string 旋轉字串 q 26 左旋轉字串 題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 public cla...