每天一道C\C++筆試題IV—翻轉字串

來源:互聯網
上載者:User

這也是筆試中一道經典的C語言題:

給定一個字串,將其翻轉。如abc ==> cba

拿到此題時,我是想都沒想,直接說,再用一個字串tmp來緩衝一下此串,然後一個for迴圈賦值搞定。

思路有了,代碼就有了。

#include <stdio.h>#include <stdlib.h>int main(){char string[20],tmp[20];int length;printf("please input less than 20 char:");scanf("%s",string);printf("your input string is %s\n",string);length = strlen(string);printf("length is %d\n",length);for(int i = 0;i<length;++i){tmp[i] = string[i];}for(int i = 0;i<length;++i){string[i] = tmp[length-i-1];}printf("after revert:%s\n",string);return 0;}

用gcc編譯:gcc -o revert revert_string.c -std=c99

後運行,結果如我所料。但是我這個演算法太不優雅了,因為將兩個字元數組賦值就用了一個迴圈,然後翻轉時再用一個迴圈,這效率真是不敢恭維。

優雅的方法應該是這樣的思路:

找到這個字串的中間位置,然後將其左邊的字元與右邊的字元交換位置。

實現起來應該是下面這樣:

#include <stdio.h>#include <stdlib.h>int main(){char string[20], tmp;int length;printf("please input less than 20 char:");scanf("%s",string);printf("your input string is %s\n",string);//get string length,very useful methodfor(length=0;string[length];length++);printf("length is %d\n",length);//very beateful !!!for(int i=0;i<length/2;i++){tmp = string[i];printf("tmp is %c\n" ,string[i]);string[i] = string[length-i-1];printf("string[%d] is %c\n",i,string[length-i-1]);string[length-i-1] = tmp;printf("string[%d] is %c\n",length-i-1,tmp);}printf("after revert:%s\n",string);return 0;}

運行效果如下:

D:\workspace\C\revert_string>gcc -o revert revert_string.c -std=c99D:\workspace\C\revert_string>revertplease input less than 20 char:abcyour input string is abclength is 3tmp is astring[0] is cstring[2] is aafter revert:cbaD:\workspace\C\revert_string>revertplease input less than 20 char:abcdyour input string is abcdlength is 4tmp is astring[0] is dstring[3] is atmp is bstring[1] is cstring[2] is bafter revert:dcba

這樣的演算法,相比之前要提高甚多效率。只要開動腦筋,世界會更加優雅。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.