[ACM ] Q272: TeX Quotes (已解決)

看板C_and_CPP作者 (ninE)時間13年前 (2011/07/10 00:42), 編輯推噓3(3039)
留言42則, 6人參與, 最新討論串1/1
接觸ACM沒多久,果然又爆炸了! 這題我是用getline 一直是WA 找了很久,還是抓不到蟲蟲… 所以上來版上求助 以下是程式碼: ------------------------------------ #include <cstdlib> #include <iostream> #include <string> using namespace std; int main(int argc, char *argv[]) { string str,tempStr; string::size_type pos=0; bool flag=0; while(getline(cin,tempStr)) { while( (pos=tempStr.find("\"",pos)) !=string::npos ) { tempStr.replace(pos,1,flag==0?"``":"''"); flag=!flag; } str+=tempStr+"\n"; //每次都補上換行 } str.erase(str.size()-1,1); //最後EOF移除多的換行 cout<<str; system("PAUSE"); return EXIT_SUCCESS; } ----------------------------------- 懇請版友幫忙,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.41.199

07/10 00:49, , 1F
system("pause")?
07/10 00:49, 1F
還是WA

07/10 01:06, , 2F
"\'\'"
07/10 01:06, 2F
好像也不是這邊錯

07/10 01:09, , 3F
不過replace只能換一個吧...
07/10 01:09, 3F

07/10 01:10, , 4F
`` 與''都是兩個字元...
07/10 01:10, 4F
replace也可以插字串

07/10 11:14, , 5F
system("PAUSE") 要拿掉....
07/10 11:14, 5F
整個拿掉了,還是得到WA…這樣代表應該其他地方有錯

07/10 14:59, , 6F
我記得我當初是用cin.get(c); 一個字元慢慢輸入
07/10 14:59, 6F
判斷獨立字元好像比較單純,不過既然寫getline了,想知道錯在哪裡…

07/10 19:35, , 7F
我當初原本也用string可是用了很久都沒過就是了
07/10 19:35, 7F

07/10 23:43, , 8F
nested quote?
07/10 23:43, 8F

07/10 23:44, , 9F
當我沒說 XD
07/10 23:44, 9F

07/11 00:16, , 10F
建議先砍掉重練...(可能過了一段時間就想出來也說不定)...
07/11 00:16, 10F

07/11 21:59, , 11F
replace(pos,1,flag==0?"``":"''")<--你只是替換1個字元
07/11 21:59, 11F

07/11 22:00, , 12F
你卻給他兩個字元,你要記得你是用1,非2.
07/11 22:00, 12F

07/11 22:01, , 13F
cout<<str->cout<<str<<endl即可,不用特地去處理\n
07/11 22:01, 13F

07/11 22:03, , 14F
再來str.erase(str.size()-1,1);<--應該也是爆掉的點
07/11 22:03, 14F

07/11 22:08, , 15F
angleevil 真魔人也~~
07/11 22:08, 15F

07/12 10:48, , 16F
http://codepad.org/lN39NaHB ,你用這個試試看
07/12 10:48, 16F

07/12 11:11, , 17F
其實昨天那些話,是根據程式去看的.今天測試一下才發現
07/12 11:11, 17F

07/12 11:13, , 18F
replace真的可以這樣弄,我覺得可以不用erase
07/12 11:13, 18F

07/12 11:18, , 19F
假如不是c++我會這樣寫http://codepad.org/nJf3NIkh
07/12 11:18, 19F

07/12 11:19, , 20F
C++不是我能負荷的XD
07/12 11:19, 20F

07/12 11:26, , 21F
或許嘗試邊做邊輸出...
07/12 11:26, 21F

07/12 11:29, , 22F
我剛剛就是邊做邊輸出,但是不是每天都有時間給我這樣弄
07/12 11:29, 22F

07/12 11:30, , 23F
原po以後請講出來,你到底爆掉什麼?我昨天一直以為是邊界
07/12 11:30, 23F

07/12 11:31, , 24F
pos有歸零嗎?
07/12 11:31, 24F

07/12 11:31, , 25F
爆掉,有部分的人也是這樣想的
07/12 11:31, 25F

07/12 11:32, , 26F
恩...我發現似乎pos沒歸零耶...
07/12 11:32, 26F

07/12 11:32, , 27F
size_type pos=0;<--
07/12 11:32, 27F

07/12 11:34, , 28F
要在搜尋前歸零吧...
07/12 11:34, 28F

07/12 11:34, , 29F
似乎npos是-1 ....
07/12 11:34, 29F

07/12 11:36, , 30F
恩,這點我也有考慮過,但是我不知道原po打算怎麼做.
07/12 11:36, 30F

07/12 11:36, , 31F
所以我沒有修改
07/12 11:36, 31F

07/12 11:43, , 32F
恩,看來的確是該把pos=0放到while裡面.謝謝firejox
07/12 11:43, 32F

07/12 11:45, , 33F
我把pos放到裏面外加注解erase就AC了...
07/12 11:45, 33F

07/12 11:47, , 34F

07/12 11:57, , 35F
ac是ok?
07/12 11:57, 35F
原來是pos沒有歸零和最後要有換行… 因為交上去只會顯示WA,自己測試出來也看起來是對的,所以完全不知道是哪邊爆 原PO實在經驗太少,找了很久也找不出蟲 真的非常感謝版友幫忙! 最後版本是補上POS=0,以及拿掉erase,有保留system("PAUSE"); 拿到AC

07/12 12:09, , 36F
AC=Accepted 是OK的意思
07/12 12:09, 36F

07/12 12:11, , 37F
07/12 12:11, 37F
※ 編輯: ninEEE 來自: 122.118.41.126 (07/12 12:20)

07/12 12:57, , 38F
其實歸零是主因,erase是不必要的動作.我知道Accepted的
07/12 12:57, 38F

07/12 12:58, , 39F
意思,只是我不知道ac是縮寫.
07/12 12:58, 39F

07/12 13:01, , 40F
還有沒人注意到pos+1那敘述...
07/12 13:01, 40F

07/12 13:07, , 41F
發現到firejox專攻c的資料結構和演算法
07/12 13:07, 41F

07/12 15:34, , 42F
f大是練競賽起家的,當然對這個熟阿XD
07/12 15:34, 42F
文章代碼(AID): #1E68Jwly (C_and_CPP)