C/C++反序輸出字串總結

來源:互聯網
上載者:User

2年前去T公司面試,面試官給了我一張紙一支筆,說寫個程式吧,輸入一個字串然後反序輸出。我問輸入輸出是用函數參數呢還是系統I/O,面試官說隨你便,寫完了說說各有什麼優缺點吧。當時我大三,沒有參加過ACM沒有實驗室經曆除了課程設計也沒寫過什麼程式,完全小白。當然至今也仍然是菜鳥一隻,不堪回首啊。

方法一:據說有庫函數strrev()啊

1234567891011121314
#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){if (argc != 2){printf("Usage: %s string/n/n", argv[0]);return -1;}char* str = argv[1];strrev(str);printf("Reversed string: %s/n", str);return 0;}

結果Linux下編譯報錯,說找不到strrev()這個函數,我勒個去,坑爹呢這是?VS2010編譯通過正常運行。好吧,還是自己來寫一個吧~

方法二:首尾互換

123456789101112131415161718192021222324252627
#include <iostream>#include <cstring>using namespace std;  char *reverse(char *str){int len = strlen(str);char *head = str;char *tail = str + len - 1;while (head &lt; tail){char tmp = *head;*head++ = *tail;*tail-- = tmp;}return str;}int main(int argc, char* argv[]){if (argc != 2){cout << "Usage: " << argv[0] << " string" << endl;return -1;}cout << "Reversed string: " << reverse(argv[1]) << endl;return 0;}

終雩都通過了啊。就用了個迴圈把字串裡的字元逐個首尾互換了。啥?效能?有啥問題?沒看到每次進迴圈都要建立變數tmp嗎?這這這。。。這也有影響?好吧,把這個聲明放到迴圈外面。還能提升嗎?去掉字元互換操作!!直接從尾巴倒過來輸出不就得了~

方法三:從尾到頭

123456789101112131415161718
#include <iostream>#include <string>using namespace std;int main(){string str;cout << "Input: ";cin >> str;unsigned int i = str.length();cout << "Reversed string: ";while(i != 0){cout << str[i-1];--i;}cout << endl;return 0;}

這回用了I/O做輸入,並且還能保留原來的字串不變。嗯,不錯不錯,其實我們連字號串長度都不需要知道。再寫一個~

方法四:遞迴

12345678910111213141516171819
#include <iostream>using namespace std;void reverse(char *str){if(*str)reverse(str+1);elsereturn;cout << *str;}int main(){char str[1024] = {NULL};cout << "Input: ";cin >> str;reverse(str);cout << endl;return 0;}

估計一般沒人會這麼寫吧。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.