閱讀612 返回首頁    go 阿裏雲 go 技術社區[雲棲]


劍指Offer之翻轉單詞順序

題目描述:
JOBDU最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這家夥原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
輸入:
每個測試案例為一行,表示一句英文句子。
我們保證一個句子的單詞數不會超過600,每個單詞的長度也不會超過30。但是需要注意的是Fish是個不拘小節的人,有時候兩個單詞中間可能會有很多空格。為了方便起見,你可以認為一行的字符總數不會超過50000個,標點符號可以和普通字母一樣處理。
輸出:
對應每個測試案例,把翻轉後的正確的句子單獨輸出一行。
樣例輸入:
student. a am I
I'm a Freshman and I like JOBDU!
樣例輸出:
I am a student.
JOBDU! like I and Freshman a I'm

【解析】


【代碼】

/*********************************
*   日期:2013-11-29
*   作者:SJF0115
*   題號: 題目1361:翻轉單詞順序
*   來源:https://ac.jobdu.com/problem.php?pid=1361
*   結果:AC
*   來源:劍指Offer
*   總結:
**********************************/
#include <stdio.h>
#include <malloc.h>
#include <string.h>

char *words;

//反轉單詞
void ReverseWord(char* words,int begin,int end){
    int temp;
    if(words == NULL || begin > end || begin < 0){
        return;
    }
    //反轉
    while(begin < end){
        temp = words[begin];
        words[begin] = words[end];
        words[end] = temp;
        begin ++;
        end --;
    }
}

char* Reverse(char *words){
    int i;
    if(words == NULL){
        return NULL;
    }
    int len = strlen(words);
    //反轉整個句子
    ReverseWord(words,0,len-1);
    //逐個反轉單詞
    int begin = 0,end = 0,isFirst = 0;//begin 單詞第一個字母下標 end 單詞最後一個字母下標isFirst 判斷是不是單詞後第一個空格
    for(i = 0;i <= len;i++){
        //空格
        if(isFirst == 0 && words[i] == ' '){
            begin = end = i+1;
        }
        //單詞後第一個空格或者一個句子的結束
        else if((isFirst == 1 && words[i] == ' ')|| words[i] == '\0'){
            ReverseWord(words,begin,end);
            begin = end = i+1;
            isFirst = 0;
        }
        //單詞
        else{
            end = i;
            isFirst = 1;
        }
    }
    return words;
}


int main() {
    int i,n;
    words = (char*)malloc(sizeof(char)*50001);
    while(gets(words)){
        words = Reverse(words);
        for(i = 0;i < strlen(words);i++){
            printf("%c",words[i]);
        }
        printf("\n");
    }//while
    return 0;
}


最後更新:2017-04-03 14:54:38

  上一篇:go Android,關於設備獨立像素(dip/dp),關於機型屏幕適配
  下一篇:go 手機衛士13-手機歸屬地數據庫