char* reverse(char* s)原地逆序
英文叫做in-place reverse。這是最常考的,原地逆序意味著不允額外分配空間,主要有以下幾種方法,思想都差不多,就是將字串兩邊的字元逐個交換,如下圖。給定字串"abcdef",逆序的過程分別是交換字元a和f,交換字元b和e,交換字元c和d。
一 設定兩個指標,分別指向字串的頭部和尾部,然後交換兩個指標所指的字元,並向中間移動指標直到交叉。
char* reverse(char* s)二 用遞迴的方式,需要給定逆序的區間,呼叫方法:reverse(s, 0, strlen(s)) ;return
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 ;}
//給定乙個字串,按單詞將該字串逆序,比如給定"this is a sentence",則輸出是"sentence a is this",為了簡化問題,字串中不包含標點符號。使用異或操作對字串s進行逆序
char* reverse(char*s)
return
r ;}
分兩步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屬...