C語言字串學習中的一些神奇的題目

2021-09-26 04:18:17 字數 1146 閱讀 9329

廢話不多說,直接上題

題目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...