字串逆序的幾種方法

2021-07-25 04:38:55 字數 1912 閱讀 5953

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)

多種方法實現字串逆序

編寫函式,實現字串逆序 include include include char func1 char str 普通逆序 temp 0 return result char func2 char str 異或逆序 while temp result return result char revers...

分割字串的幾種方法

單個字元分割 string s abcdeabcdeabcde string sarray s.split c foreach string i in sarray console.writeline i.tostring 輸出下面的結果 ab deab deab de多個字元分割 string s...

字串複製的幾種方法

字串 只有以 0 結尾的字元集合才能稱為字串。char arr 10 是字串 char brr 不是字串 char crr 10 不是字串 字元陣列特有的 char drr 10 是 char err 10 abcd 是 char frr abcd 字元指標,不是陣列 c語言中用str2 str1屬...