程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 翻轉單詞順序

翻轉單詞順序

編輯:C++入門知識

前言
題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。例如輸入字符“student. a am I”,輸出為"I am a student.".這個題目很常見,據說很多公司都多次拿來作面試題目。這裡主要是因為網上很多相關代碼都是照抄何海濤的《劍指offer》,c++風格的代碼無法接受,所以這裡貼出我的ac代碼


思路
這個題目的思路比較簡單,分兩步即可:
翻轉句子中所有的字符,例如翻轉“student. a am I”中所有的字符得到“I ma a .tneduts”,此時不但翻轉了句子中的單詞的順序,連單詞內的字符順序也被翻轉了
再翻轉每個單詞中字符的順序,就得到“I am a students.”了


字符串翻轉的代碼實現很簡單,我貼出我寫的c代碼:


[cpp]
void reverse_word(char *str, int begin, int end) 

    char temp; 
 
    while (begin < end) { 
        temp = *(str + begin); 
        *(str + begin) = *(str + end); 
        *(str + end) = temp; 
        begin ++; 
        end --; 
    }    

void reverse_word(char *str, int begin, int end)
{
 char temp;

 while (begin < end) {
  temp = *(str + begin);
  *(str + begin) = *(str + end);
  *(str + end) = temp;
  begin ++;
  end --;
 } 
}


示例
[html]
題目描述: 
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 

題目描述:
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

ac代碼
[cpp]
#include <stdio.h>  
#include <string.h>  
  
void reverse_word(char *str, int begin, int end); 
  
int main(void) 

    int st, ed, len; 
    char str[50001]; 
  
    while (gets(str)) { 
        len = strlen(str); 
        reverse_word(str, 0, len - 1); 
  
        for (st = ed = 0; ed < len;) { 
            while (*(str + ed) != ' ' && *(str + ed) != '\0') { 
                ed ++; 
            } 
            reverse_word(str, st, ed - 1); 
              
            st = ed; 
  
            while (*(str + st) == ' ') { 
                st ++; 
            } 
            ed = st; 
        } 
  
        puts(str); 
    } 
  
    return 0; 

  
void reverse_word(char *str, int begin, int end) 

    char temp; 
  
    while (begin < end) { 
        temp = *(str + begin); 
        *(str + begin) = *(str + end); 
        *(str + end) = temp; 
        begin ++; 
        end --; 
    }    

/**************************************************************
    Problem: 1361
    User: wangzhengyi
    Language: C
    Result: Accepted
    Time:50 ms
    Memory:912 kb
****************************************************************/ 

#include <stdio.h>
#include <string.h>
 
void reverse_word(char *str, int begin, int end);
 
int main(void)
{
    int st, ed, len;
    char str[50001];
 
    while (gets(str)) {
        len = strlen(str);
        reverse_word(str, 0, len - 1);
 
        for (st = ed = 0; ed < len;) {
            while (*(str + ed) != ' ' && *(str + ed) != '\0') {
                ed ++;
            }
            reverse_word(str, st, ed - 1);
            
            st = ed;
 
            while (*(str + st) == ' ') {
                st ++;
            }
            ed = st;
        }
 
        puts(str);
    }
 
    return 0;
}
 
void reverse_word(char *str, int begin, int end)
{
    char temp;
 
    while (begin < end) {
        temp = *(str + begin);
        *(str + begin) = *(str + end);
        *(str + end) = temp;
        begin ++;
        end --;
    }  
}
/**************************************************************
    Problem: 1361
    User: wangzhengyi
    Language: C
    Result: Accepted
    Time:50 ms
    Memory:912 kb
****************************************************************/

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved