字串逆序

2021-06-25 22:34:23 字數 1986 閱讀 5716

基本上沒有這麼考的,放在這裡主要是為了和後面的原地逆序做個對比。很簡單,直接分配乙個與原字串等長的字元陣列,然後反向拷貝一下即可。

char* reverse(char* s)

原地逆序

英文叫做in-place reverse。這是最常考的,原地逆序意味著不允額外分配空間,主要有以下幾種方法,思想都差不多,就是將字串兩邊的字元逐個交換,如下圖。給定字串"abcdef",逆序的過程分別是交換字元a和f,交換字元b和e,交換字元c和d。

一 設定兩個指標,分別指向字串的頭部和尾部,然後交換兩個指標所指的字元,並向中間移動指標直到交叉。

char* reverse(char* s)

return

s ;}

二 用遞迴的方式,需要給定逆序的區間,呼叫方法:reverse(s, 0, strlen(s)) ;

//

對字串s在區間left和right之間進行逆序,遞迴法

void reverse( char* s, int left, int

right )

三 非遞迴法,同樣指定逆序區間,和方法一沒有本質區別,乙個使用指標,乙個使用下標。

//

對字串str在區間left和right之間進行逆序

char* reverse( char* s, int left, int

right )

return

s ;}

//

使用異或操作對字串s進行逆序

char* reverse(char*s)

return

r ;}

給定乙個字串,按單詞將該字串逆序,比如給定"this is a sentence",則輸出是"sentence a is this",為了簡化問題,字串中不包含標點符號。

分兩步1 先按單詞逆序得到"siht si a ecnetnes"

2 再整個句子逆序得到"sentence a is this"

對於步驟一,關鍵是如何確定單詞,這裡以空格為單詞的分界。當找到乙個單詞後,就可以使用上面講過的方法將這個單詞進行逆序,當所有的單詞都逆序以後,將整個句子看做乙個整體(即乙個大的包含空格的單詞)再逆序一次即可,如下圖所示,第一行是原始字元換,第二行是按單詞逆序後的字串,最後一行是按整個句子逆序後的字串。

對指標p和q之間的所有字元逆序

void reverseword(char* p, char*q)}//

將句子按單詞逆序

char* reversesentence(char* s)

else

q++;

}reverseword(p, q - 1) ; //

對最後乙個單詞逆序

reverseword(s, q - 1) ; //

對整個句子逆序

return

s ;}

還有一類題目是要求逆序輸出,而不要求真正的逆序儲存。這題很簡單,有下面幾種方法,有的方法效率不高,這裡僅是提供乙個思路而已。

先求出字串長度,然後反向遍歷即可。

void

reverseprint(

const 

char*s)

如果不想求字串的長度,可以先遍歷到末尾,然後在遍歷回來,這要借助字串的結束符'\0

void reverseprint(const char*s)

}

對於上面第二種方法,也可以使用遞迴的方式完成。

void

reverseprint(

const 

char*s)

字串 字串逆序

題目一 如果乙個字串 str 把字串 str 前面的任意部分挪到後面去形成的字串叫做 str 的旋轉詞。比如 str 1234 那麼 str 的旋轉詞有 1234 2341 3412 4123 給定兩個字串 a 和 b 請判斷 a 和 b 是否互為旋轉詞?舉例 a cdab b abcd 返回 tr...

字串逆序

1 方法1 protected void page load object sender,eventargs e 1.逆序乙個字串 public string reversestr return s1 2 方法2 public void reversestr 方法3 protected void p...

字串逆序

reverse int arr,int b,int e rightshift int arr,int n,int k abc defg defg abc 方法一 翻轉 abc defg cba gfed cba gfed defg abc經過三次翻轉 如上。方法二 交換加翻轉 abc defgh d...