方法一:利用異或字元的數值進行反轉實現字元的反轉,該方法不使用額外的變數。
packagestring;
public
class
stringreverse
public
static
string reversebyxor(string original)
return
newstring(chararray);
}}
使用異或交換數值的原理:
大家都知道,假如有a,b兩個整型數,我們可以用
a^=b;
b^=a;
a^=b;
來交換a,b的值,在這裡我說說其中的原理:
^ 在 c 裡面是按位異或操作符,相同的話異或的結果就是 0,不同的話就是 1。舉個例子,比如 a 表示十進位制的 5,b 表示十進位制的 12,按位異或結果就是:
a = 0101 (5 的二進位制表示)
b = 1100 (12 的二進位制表示)
----
c = 1001 (結果為 9)
可以看出 c 中是 1 的部分就是 a 和 b 二進位制表示對應位不同的部分,0 則是相同的部分。
牢記以下兩條原則:
任何一位二進位制數同 1 異或都會變成另外乙個(0 同 1 異或的結果是 1,1 同 1 異或的結果是 0)
任何一位二進位制數同 0 異或都保持不變(0 同 0 異或的結果是 0,1 同 0 異或的結果是 1)
因為 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那麼 a 同 c 異或的結果就是 a 中與 b 不同的位發生變化,二進位制數每位只有兩種狀態,所以 a 變成了 b:
a = 0101
c = 1001
----
b = 1100
同樣, b 與 c 異或結果就變成了 a:
b = 1100
c = 1001
----
a = 0101
字串反轉
據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...
字串反轉
include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...
字串反轉
解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...