字串的旋轉 C語言

2021-10-11 01:12:17 字數 1500 閱讀 1483

abcd左旋乙個字元得到bcda

abcd左旋兩個字元得到cdab

思路1:設計迴圈使其可以旋1次,然後讓他執行n次

void

leftround

(char

* src,

int time)

src[j]

= tmp;

}}

思路2:但是一次一次轉畢竟太麻煩,我們可以選擇拼接法,一次到位:

void

leftround

(char

* src,

int time)

;//更準確的話可以選擇malloc len + 1個位元組的空間來做這個tmp

strcpy

(tmp, src + pos)

;//先將後面的全部拷過來

strncat

(tmp, src, pos)

;//然後將前面幾個接上

strcpy

(src, tmp)

;//最後拷回去

}

思路3:這個方法要用到乙個陣列形成的輔助空間,讓人覺得有點不爽,還可以有更好的選擇,例如abcdefg,左旋3次後變成defgabc,有乙個特殊的操作方式:

先將要左旋的前三個傢伙逆序(cbadefg),然後將後半段也逆序(cbagfed),最後整體逆序(defgabc)即可。這樣只需要做數值交換即可,可以寫乙個函式幫我們完成區域性逆序,**如下:

void

reverse_part

(char

*str,

int start,

int end)

//將字串從start到end這一段逆序

}void

leftround

(char

* src,

int time)

例如:給定s1 =aabcd和s2 = bcdaa,返回1

給定s1=abcd和s2=acbd,返回0.

aabcd左旋乙個字元得到abcda

aabcd左旋兩個字元得到bcdaa

aabcd右旋乙個字元得到daabc

思路:其實abcde無論怎麼旋,旋轉後的所有結果,都包含在了abcdeabcd這個字串裡了。

所以做法很簡單,只需要將原字串再來一遍接在後面,然後找一找待查詢的字串是不是兩倍原字串的子集即可。

int

findround

(const

char

*arr1,

char

* arr2)

;strcpy

(temp, arr1)

;strcat

(temp, arr1)

;return

strstr

(temp, arr2)

!=null

;}

以上參考**僅用來學習記錄。

C語言字串的旋轉

1.字串的任意次數左旋轉 方法1.時間複雜度o n 2 include include include pragma warning disable 4996 void rotate char arr,int len,int num arr len 1 a 再將首字元放到字串的尾 num int m...

C語言之字串旋轉

字串在語言中也是非常重要的存在,所以對於字串也有非常多的知識,而今天我就要和大家分享的是關於字串的一些問題 具體問題如下 實現乙個函式,可以左旋字串中的k個字元。abcd左旋乙個字元得到bcda abcd左旋兩個字元得到cdab 思路 其實這個問題我感覺就比較容易了,就是將乙個陣列中字元的位置按順序...

C語言 字串旋轉結果

題目 寫乙個函式,判斷乙個字串是否為另外乙個字串旋轉之後的字串。例如 給定s1 aabcd和s2 bcdaa,返回1 給定s1 abcd和s2 acbd,返回0 aabcd左旋乙個字元得到abcda aabcd左旋兩個字元得到bcdaa aabcd右旋乙個字元得到daabc 思路 通過移動乙個字串與...