字串反轉

2021-06-04 15:29:21 字數 900 閱讀 1669

#include #include #include //方法一:將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去

char *strrev1(const char *str)

return tmp;

free(tmp);}

// 方法二:不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡面的內容

char *strrev2(const char *str)

return ret;

free(tmp);}

/*顯然上面的兩個解法中沒有考慮時間和空間的優化,乙個典型的優化策略就是兩個字元交換的演算法優化,我們可以完全不使用任何外部變數即完成兩個字元(或者整數)的交換,

這也是乙個很經典的面試題目。特別是一些嵌入式硬體相關程式設計中經常要考慮暫存器的使用,因此經常有不使用任何第三個暫存器即完成兩個暫存器資料的交換的題目。一般有

兩個解法,對應這裡的解法三和解法四。*/

char *strrev4(const char *str)

return ret;

free(tmp);}

/*還可以通過遞迴的思想來解決這個問題,思想很簡單:每次交換首尾兩個字元,中間部分則又變為和原來字串同樣的問題,因此可以通過遞迴的思想來解決這個問題,對應解法五的實現**為:*/

char *strrev5(char *str,int len)

char t = *str;

*str = *(str + len - 1);

*(str + len - 1) = t;

return (strrev5(str + 1,len - 2) - 1);}

int main(int argc,char *argv)

字串反轉

據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...

字串反轉

解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...

反轉字串

問題 用o n 的演算法把 www.taobao.com 轉成 com.taobao.www 方法 用兩個棧 從左至右掃瞄字串,以點號為分隔符,每次掃瞄到點號的時候就把前面的字元壓棧到s1,然後再一直吧s1裡的東西彈棧到s2,一直彈到s1空為止 中間過程中弄幾個標記變數儲存陣列指標,最後把s2裡的東...