C++實現一句英文句子中的單詞逆置
阿新 • • 發佈:2019-01-29
去騰訊面試的時候被問到這個題,當時說了兩種方法,但是都需要移動元素,且需要輔助空間,面試官不太滿意。其實這道題不難,只能怪我太笨嘍。後來面試官告訴了我答案,確實是不錯的方法,只用了一點小技巧就很容易的實現了,回來之後我就用程式碼實現了下,寫到這裡分享一下,也當是給自己長記性了。如有錯誤,敬請指正。
先跟大家解釋下題意:
比如,輸入:I come from China.
輸出:China. from come I
大概思路就是先將這個字串整體倒置,再將單個單詞倒置,這樣既不需要移動元素,也不需要額外的輔助空間,還可以重用程式碼,很不錯吧。
下面直接上程式碼:
輸出結果為:China. from come I#include <iostream> int len(char* str) {//計算字串的長度 int length = 0; for(int i = 0; str[i] != '\0'; i++) { length++; } return length; } char* reverseWord(char* str ,int i,int j) {//根據i,j的位置反轉單詞 char temp; while(i < j) { temp = str[i]; str[i] = str[j]; str[j] = temp; i++; j--; } return str; } char *strReverse(char *str) {//字串反轉,用到了上面的函式 int length=len(str); char *newStr=reverseWord(str,0,(length-1)); for (int i=0; i<length; i++) { int len=0; while(newStr[i] != ' ' && newStr[i] !='\0') { len++; i++; } int k = i-len,j=i-1; reverseWord(newStr,k,j); } return str; } int main(int argc, const char * argv[]) { char str[]="I come from China."; int length=len(str); strReverse(str); for (int i=0; i<length;i++) { std::cout <<str[i]; } std::cout<<std::endl; return 0; }