日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CODEVS 1205 单词反转

發(fā)布時(shí)間:2023/12/1 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CODEVS 1205 单词反转 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

嗯....

?

這道題看起來挺像一個(gè)字符串的題,但其實(shí)卻錯(cuò)了,它實(shí)質(zhì)上卻用了一個(gè)棧進(jìn)行了一個(gè)模擬(當(dāng)然還有一種鬼畜的做法,下面也會(huì)介紹到.....

首先先看題:

時(shí)間限制: 1 s

空間限制: 128000 KB

題目等級(jí) : 青銅 Bronze ?

?題目描述?

給出一個(gè)英語句子,希望你把句子里的單詞順序都翻轉(zhuǎn)過來

輸入描述?

輸入包括一個(gè)英語句子。

輸出描述?

按單詞的順序把單詞倒序輸出

樣例輸入?

I love you

樣例輸出

you love I

數(shù)據(jù)范圍及提示

簡(jiǎn)單的字符串操作

?

思路一:

  因?yàn)轭}目中有“翻轉(zhuǎn)”兩個(gè)字,首先想到先進(jìn)后出,直接聯(lián)想到棧,這里可以用手動(dòng)棧進(jìn)行模擬,思路主要是先將所有的字符全部輸入,并且將讀入的一串字符串倒序壓入棧中。

然后用頭指針top以此向下遍歷,如果找到一個(gè)空格,說明這是一個(gè)單詞,則將這個(gè)單詞的每個(gè)字母依次輸出,并加上空格(注意不僅要判斷空格,還要特判一下是否為最后一個(gè)單詞)....并且注意此種思路是對(duì)每一個(gè)字母進(jìn)行操作

見手動(dòng)棧代碼:

1 #include <cstdio>2 #include <cstring>3 4 5 using namespace std;6 7 8 char s[105], stack[105];9 int main() 10 { 11 int top = -1;//初始化棧為空 12 13 gets(s);//將所有字符讀入 14 15 for(int i = strlen(s); i >= 0; i--){//倒序 16 if(s[i] != ' '&& i != 0){// 確定兩個(gè)邊界 17 stack[++top]=s[i];// 只將除空格外的字符入棧 18 } 19 else// 遇到空格或者處理最后一個(gè)元素 20 { 21 if(i == 0){//當(dāng)最后一個(gè)元素處理時(shí) 22 stack[++top] = s[i];//入棧 23 while(top)//判斷棧是否為空 24 printf("%c",stack[top--]);//輸出棧,不需加空格 25 } 26 //如果不是處理到最后一個(gè)元素,而只是遇到了空格而隔開 27 while(top)//不必加else判斷,如果執(zhí)行了上面的if語句,那么執(zhí)行完之后棧肯定為空,下面語句不會(huì)再執(zhí)行 28 printf("%c",stack[top--]); 29 printf(" ");//出棧時(shí)加上空格 30 } 31 } 32 return 0; 33 } 手動(dòng)棧

?

思路二:

  同樣是用棧,但是還可以用STL庫中的棧,這樣避免了頭指針的麻煩性。思路大體就是定義一個(gè)string類型的棧,將輸入的每一個(gè)單詞作為一個(gè)整體壓入棧中(注意while語句有坑,當(dāng)你輸入時(shí)會(huì)輸入不完,所以在自己測(cè)試中要用Ctrl + z 停止操作,所以還是比較支持手動(dòng)棧,這種做法不太嚴(yán)謹(jǐn)....)。當(dāng)棧不為空的時(shí)候, 就從頂部輸出每一個(gè)單詞,并且給它在后面加上空格 ....此種思路是對(duì)每一個(gè)單詞進(jìn)行操作

見STL庫棧代碼:

1 #include<iostream> 2 #include<cstring> 3 #include<stack> 4 5 using namespace std; 6 7 stack<string> st;// 注意將棧設(shè)為字符串類型,壓入的每一個(gè)元素都可以為一個(gè)字符串 8 9 int main() 10 { 11 string a;//存放單個(gè)單詞的臨時(shí)字符串 12 while(cin>>a) 13 { 14 st.push(a);//cin讀取第一個(gè)單詞,push入棧 15 } 16 while(!st.empty())//當(dāng)棧非空時(shí)重復(fù)下列操作 17 { 18 cout<<st.top()<<" "; //輸出棧頂元素,即最后一個(gè)單詞 19 st.pop();//刪除已輸出的單詞,此時(shí)倒數(shù)第二個(gè)單詞為棧頂 20 } 21 return 0; 22 } 23 //自己測(cè)試時(shí)需Ctrl+Z結(jié)束讀取 STL棧

?

思路三:

  這個(gè)題當(dāng)然除了棧還可以用基礎(chǔ)的string操作....(感覺這種操作好鬼畜啊QAQ....具體的思路就是用string類型的a來儲(chǔ)存每一次讀入的單詞,我們?cè)儆靡粋€(gè)string類型的s來儲(chǔ)存答案,因?yàn)橐嬷敵?#xff0c;而這里與上兩個(gè)思路不太相同,前兩個(gè)思路都是輸出時(shí)進(jìn)行倒序,而這種思路就是存儲(chǔ)時(shí)就倒著存儲(chǔ)...所以將原來s的基礎(chǔ)上再在它的前面加上a和空格即可....(太鬼畜了...解釋不清楚,還是看代碼吧....(注意這種做法也是不太嚴(yán)謹(jǐn),還是輸入時(shí)要用Ctrl + z停止輸入)

?

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 5 using namespace std; 6 7 int main() 8 { 9 string a,s; 10 s=" "; 11 while(cin>>a) 12 s=a+" "+s;//即為思路中解釋不明白的地方... 13 cout<<s; 14 return 0; 15 } 鬼畜操作

?

嗯....

?

這三個(gè)思路其實(shí)哪一個(gè)都不錯(cuò),取決于個(gè)人的習(xí)慣,思路一和思路二差不多,比較容易思考但代碼有難度,但思路三思考起來有點(diǎn)困難,但是代碼簡(jiǎn)便易懂....(總體來說這道題的解法還是比較全的了....

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/New-ljx/p/10473621.html

總結(jié)

以上是生活随笔為你收集整理的CODEVS 1205 单词反转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。