入門(mén)算法 - 句子逆序輸出

內(nèi)容同步于我的博客:https://blog.bigrats.net/archives/basic-alg-sentence-inverse.html

題目描述

將一個(gè)英文語(yǔ)句以單詞為單位逆序排放。例如:"I am a boy"逆序輸出為"boy a am I"。所有單詞之間用一個(gè)空格隔開(kāi),語(yǔ)句中除了英文字母外,不再包含其他字符。

輸入描述

輸入一個(gè)不包含符號(hào)的英文語(yǔ)句

輸出描述

輸出單詞逆置后的句子

示例

Input:

I am a boy

Output:

boy a am I

問(wèn)題分析

對(duì)于這類(lèi)倒置的問(wèn)題,最容易想到的就是利用棧的先進(jìn)后出的特性。只需將每個(gè)單詞入棧,然后再依此出棧輸出即可。

算法描述

  1. 將每個(gè)單詞入棧,其具體方法為將單詞后的空格替換為字符串結(jié)束符"\0",同時(shí)返回單詞第一個(gè)字符的指針,然后將句子的指針指向空格的下一個(gè)字符。
  2. 將每個(gè)單詞的首字符指針入棧,待所有單詞處理完畢后依此出棧輸出結(jié)果。

代碼

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stack>

using namespace std;

char* getNextWord(char* &str) {
    int pos_spc = 0;
    char *p = NULL;
    if(str == NULL) return NULL;  //若句子字符串為空,說(shuō)明已經(jīng)處理了所有單詞
    while(pos_spc < strlen(str)) {
        if(str[pos_spc] == ' ') {
            break; //找到空格位置跳出循環(huán)
        }
        pos_spc++;
    }
    p = str; //返回單詞第一個(gè)字符的指針
    if(pos_spc == strlen(str)) { //遍歷到字符串的結(jié)束符而結(jié)束循環(huán)
        str = NULL;
    } else {
        str[pos_spc] = '\0'; //將原空格字符改置為結(jié)束符
        str = str + pos_spc + 1;
    }   
    return p;
}

int main() {
    char *str = (char*)malloc(5000*sizeof(char));
    char *p;
    stack<char*> s;
    
    while(gets(str) != NULL) {
        int i = 0;
        while(!s.empty()) s.pop();
        while((p = getNextWord(str)) != NULL) {
            s.push(p); //將每個(gè)單詞的首字母指針入棧
        }
        while(!s.empty()) {
            printf("%s", s.top());
            s.pop();
            if(s.size() != 0) printf(" ");
        }
    } 
    
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,711評(píng)論 0 5
  • 感賞今天兒子自己完成了作業(yè),家教大哥哥有事沒(méi)來(lái),但還是自己做了。感賞兒子期中考試成績(jī)有進(jìn)步,雖然兒子自己不太滿意,...
    糊兔兔閱讀 220評(píng)論 1 1
  • 最近李敖特別的忙,他在和洪門(mén)等幾位老大商量攻打歐陽(yáng)家族的事宜,為了給歐陽(yáng)家族以致命的打擊,將其徹底的拔除,幾大勢(shì)力...
    熱血謝少閱讀 388評(píng)論 0 4
  • 風(fēng)花雪月古城繁, 洱海湖水碧浪漣。 萬(wàn)壑蒼山神韻在, 芳華煙雨等君觀。
    耆女閱讀 113評(píng)論 0 1
  • 紅日山間墜,金光水中閃。 風(fēng)箏空中飄,虹橋江中落。 行人走,魚(yú)兒游。 燈光點(diǎn)點(diǎn),晚風(fēng)習(xí)習(xí)。 霞光閃閃 ,波光粼粼。...
    漳州榮媽閱讀 306評(píng)論 0 0

友情鏈接更多精彩內(nèi)容