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 思路 通過移動乙個字串與...