你會如何改進這個演算法?
問題
char * reverse(const char * str) { int length = strlen(str); char * reversed_string = new char[length+1]; for(int i = 0; i < length; ++i) { reversed_string[i] = str[(length-1) - i]; } //need to null terminate the string reversed_string[length] = '\0'; return reversed_string; } int main(int argc, char * argv[]) { char * rev_str = reverse("Testing"); cout << "Your string reversed is this: " << rev_str << endl; delete rev_str; rev_str = 0; return 0; }
解決方案
上面的 for 迴圈有錯字。檢查迴圈變數 i 應該是 <= 而不是 <,否則對於奇數個元素將失敗。for(int i = 0; i <= 長度/2; ++i)
char * reverse(const char * str) { if (!str) return NULL; int length = strlen(str); char * reversed_string = new char[length+1]; for(int i = 0; i < length/2; ++i) { reversed_string[i] = str[(length-1) - i]; reversed_string[(length-1) - i] = str[i]; } //need to null terminate the string reversed_string[length] = '\0'; return reversed_string; }
int length = strlen(string);for(int i = 0; i < length/2; i++) {string[i] ^= string[length - i] ^= string[i] ^= string[length - i];}
static inline voidbyteswap (char *a, char *b){*a = *a^*b;*b = *a^*b;*a = *a^*b;}voidreverse (char *string){char *end = string + strlen(string) - 1;while (string < end) {byteswap(string++, end--);}}
char* stringReverse(const char* sInput){std::size_t nLen = strlen(sInput);std::stack<char> charStack;for(std::size_t i = 0; i < nLen; ++i){charStack.push(sInput[i]);}char * result = new char[nLen + 1];std::size_t counter = 0;while (!charStack.empty()){result[counter++] = charStack.top();charStack.pop();}result[counter] = '\0';return result;}
原文連結: https://www.chaindev.cn/219420-how-would-you-improve-this-algorithm-c-string-reversal/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016198/viewspace-2885700/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何改進你的指令碼程式指令碼
- 自媒體人如何利用熱點進行創作?這三個技巧你學會了麼?
- 面試官:你都工作3年了,這個演算法題都不會?面試演算法
- 這個SQL你會最佳化嗎?SQL
- 改進你的c#程式碼的5個技巧(三)C#
- 改進你的c#程式碼的5個技巧(四)C#
- 這20個Docker Command,有幾個是你會的?Docker
- 十個改變了計算機世界的演算法,你知道幾個?計算機演算法
- 【2019 前端進階之路】站住,你這個Promise!前端Promise
- React 中你會這 10 個 JavaScript 概念嗎?ReactJavaScript
- 想幫助改善 GNOME 嗎?這個新工具給了你這個機會!
- 看完這個你還不會 插入排序 麼排序
- 如何做好遊戲產品留存?看完這個也許你會有所收穫遊戲
- 遊戲尋路中 A* 演算法的改進遊戲演算法
- Excel超大資料量如何進行處理?這個BI工具幫你輕鬆脫困Excel大資料
- 大師級設計師才會的這個CAD技巧,你會嗎?
- 演算法信仰的力量:改進演算法能提升多少效能?演算法
- Hippo如何進入WebAssembly?一文教會你Web
- 這些好用的Linux系統,你會選擇哪個?Linux
- java中的Arrays這個工具類你真的會用嗎Java
- 目前下載VS2017你可能會遇到這個坑
- 華為相機開啟這三個設定,你會操作哪個?
- Docker容器系列文章|這20個Docker Command,有幾個是你會的?Docker
- 這道js題你會嗎?JS
- 用蘋果手機拍照,連這三個功能你會嗎蘋果
- 學會這個工具的使用,讓你快速生成驗證碼
- 以事實駁斥:改進你的c#程式碼的5個技巧(四)C#
- 效能改進之專案例會匯入實踐
- [程式設計] 你真的會寫函式註釋?這裡給你一個答案程式設計函式
- 如何應用Kaizen改進當前流程?AI
- 如何改變你的終端顏色
- C++排序演算法之氣泡排序改進版C++排序演算法
- 這本書會是你在演算法分析道路上最好的養料演算法
- 學會這10種機器學習演算法,你才算入門(附教程)機器學習演算法
- 文科妹子都會用 GitHub,你這個工科生還等什麼Github
- 財務自由的機會,你這輩子錯過了多少個?
- 學會這7種SQL進階用法,讓你少走99%的彎路!SQL
- 排序演算法你學會了嗎?排序演算法