廢話不多說,直接上題
題目1.實現乙個函式,可以左旋字串中的k個字元。
例:abcd左旋乙個字元得到bcda
abcd左旋兩個字元得到cdab
左旋,一般就是指逆時針旋轉,但是出題的作者好像並不是這個意思。他的意思大概就是將最左邊的字元放到最右邊,左旋乙個字元就是將上述操作進行一遍,左旋兩個就是進行兩遍······很無聊有沒有?
這個函式寫出來也很簡單,大概就是這樣:
void
levostring
(char str,
int k)
str[len -1]
= tmp;
--k;
}}
**和在表中進行插入、刪除操作有點類似,思路都是把被插入位置之後的元素往後挪一格,以空出乙個位置放置需要插入的元素,所以需要乙個for迴圈來將最後乙個位置空出來。
題2.判斷乙個字串是否為另外乙個字串旋轉之後的字串。
例如:給定s1 =aabcd和s2 = bcdaa,返回1;
給定s1=abcd和s2=acbd,返回0.
乍一看,感覺出題人終於放大招了,感覺好像有點難?不僅要我來比較字串是否是左旋之後的結果,還要比較是否是右旋之後的結果,好像要編兩個函式啊?我們先來分析一下:
aabcd左旋乙個字元得到abcda
aabcd右旋乙個字元得到daabc
aabcd左旋兩個字元得到bcdaa
aabcd左旋三個字元得到cdaab
aabcd左旋四個字元得到daabc
對比一下,對於字串"aabcd",左旋四個字元和右旋乙個字元是等價的,也就是說,對於乙個長度為length的字串,左旋length-1個字元等價於右旋乙個字元。那麼對於任意乙個被進行旋轉操作過的字元,只要對它進行左旋(或右旋)乙個字元操作length-1次,其中就必定有一次回到了原字元,因此不管它是怎麼旋的,只要對它左旋(或右旋)length-1次,只要有一次和原字串相等,函式就返回1。
參考**:
int
islevostr
(char str1,
char str2)
return0;
}
**中的levostring就是題目1中的函式,作用是左旋。當然,右旋也是可以的。 C中的一些字串操作
函式定義 char strchr const char s,char c 表頭檔案 include 函式說明 查詢字元 串s中首次出現字元c的位置,返回首次出現c的位置的指標 如果s中不存在c則返回null 表頭檔案 include 函式定義 int strncasecmp const char s...
c語言字串的一些簡單講解
1.strlen自我詳解 下面這種寫法應該是比較快的,少變數,用指標快 1.strcmp自我詳解 這個函式只返回 1,1,0 陣列名最好不要直接來執行 操作,一般情況下會報錯 這裡又延伸出了乙個問題,就是說,當字串的值 0 是時,if條件是不會進去的。此時的值顯示的是假。除非我們還需要注意的是,如果...
C 字串的一些操作
1 定義和構造初始化 string 提供了很多建構函式,可以以多種方式來初始化string字串 5.比較操作 compare 等 string的比較操作,按字元在字典中的順序進行逐一比較。在字典前面的字元小於後面的字元。include includeusing namespace std int m...