1. 程式人生 > >C++實現一句英文句子中的單詞逆置

C++實現一句英文句子中的單詞逆置

去騰訊面試的時候被問到這個題,當時說了兩種方法,但是都需要移動元素,且需要輔助空間,面試官不太滿意。其實這道題不難,只能怪我太笨嘍。後來面試官告訴了我答案,確實是不錯的方法,只用了一點小技巧就很容易的實現了,回來之後我就用程式碼實現了下,寫到這裡分享一下,也當是給自己長記性了。如有錯誤,敬請指正。

先跟大家解釋下題意:

比如,輸入:I come from China.

          輸出: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;
}
輸出結果為:China. from come I