926
windows
CareerCup之1.2C風格字符串翻轉
【題目】
原文:
Write code to reverse a C-Style String. (C-String means that “abcd” is represented as five characters, including the null character.)
譯文:
寫代碼翻轉一個C風格的字符串。(C風格的意思是"abcd"需要用5個字符來表示,包含末尾的 結束字符)
【分析】
這是一道經典的麵試題目,雖然看似簡單,但仍然有陷阱。唯一的陷阱就是空間複雜度為O(1)即原地置換,要特別注意null字符。
【代碼1】
/********************************* * 日期:2014-05-05 * 作者:SJF0115 * 題目: C風格字符串翻轉 * 來源:CareerCup **********************************/ #include <iostream> #include <stdio.h> #include <string.h> using namespace std; //C風格字符串翻轉 void Reverse(char *str){ if(str == NULL){ return; } char *beg = str; char *end = str; //end指向最後一個元素 while(*end){ end++; } //注意 --end; char temp; //交換 while(beg < end){ temp = *beg; *beg = *end; *end = temp; end--; beg++; } } int main(){ char str[] = "1234567890"; Reverse(str); puts(str); return 0; }
【代碼2】
//C風格字符串翻轉 void Reverse(char *str){ if(str == NULL){ return; } int len = strlen(str); char temp; //交換 for(int i = 0;i < len / 2;i++){ temp = str[i]; str[i] = str[len-1-i]; str[len-1-i] = temp; } }
【代碼3】
交換的進一步優化,使用異或進行交換:
//C風格字符串翻轉 void Reverse(char *str){ if(str == NULL){ return; } char *beg = str; char *end = str; //end指向最後一個元素 while(*end){ end++; } //注意 --end; char temp; //異或 交換 while(beg < end){ *beg = *beg^*end; *end = *beg^*end; *beg = *beg^*end; end--; beg++; } }
最後更新:2017-04-03 12:56:32