看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《piness (是貼心鬼>///<)》之銘言: 吃光光 input: : addText(43,0,"OX0OY6.72X0Y2",0.100000, 335.420000,347.900000, 1,3,0); : addText(44,0,"OX0.66OY0X2Y0",0.100000, 354.560000,335.580000, 1,3,0); parsing way: : sscanf( sentence, " addText(%d,0,\"OX%lfOY%lfX%dY%d\",0.100000, %lf,%lf, 1,3, : 0);\n",&layer,&next[0],&next[1],&repeat[0],&repeat[1],&index[0],&index[1]); output method: : printf(" addText(%d,0,OX %f OY %f X %d Y %d,%lf,%lf);\n", : layer,next[0],next[1],repeat[0],repeat[1],index[0],index[1]); 先把有用/沒用的資料區分出來, 在原字串中(去掉前後的空白): "addText(43,0,"OX0OY6.72X0Y2",0.100000, 335.420000,347.900000, 1,3,0);" 你想要讀的資料其實只有(標背景色): "addText(43,0,"OX0OY6.72X0Y2",0.100000, 335.420000,347.900000, 1,3,0);" 建議的 parsing 流程(分為兩步驟): 1. 前處理 & 驗證輸入 2. 轉換資料 在step 1至少你可以把'('','')'';'等這些東西拿掉, 我個 人偏好是用空白取代掉: "addText 43 0 OX0OY6.72X0Y2 0.100000 335.420000 347.900000 1 3 0 " 然後比對是否符合: a. 以 "addText" 字串做起始 b. "OY" 必定在 "OX" 後面 c. ... 等等的規則, 不符合的話看你要提供什麼機制來通知使用者, 若格 式OK則可進行step 2(先把其他非數字部份濾掉): " 43 0 0 6.72 0 2 0.100000 335.420000 347.900000 1 3 0 " 接著只要數個簡單的sscanf就可以做掉了, 更可以應付不定長度、 輸入資料不工整的問題, 想濾掉的東西也可以用外部檔案來設定, 以上. -- ▂▂ ▄▂ T.T.L Listen 2 http://ppt.cc/jIUk ˇ ˇˇ ˇ 說什麼結束 ▃▃ http://ppt.cc/zQtB ψ髮箍 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (04/29 13:46)
james732:推板主 04/29 13:53
bestwishes:我也喜歡這種作法 在JAVA底下尤其好做 04/29 13:57
xatier:推板主,這個解更棒 04/29 14:25
piness:謝謝版主!!又多學了一招 04/29 14:35
tropical72:我比較建議原本的空白先取代成 ASCII(255),看起來也是 04/29 20:53
tropical72:空白,再用ASCII(20)去取代沒意義的東西.再將255取回來, 04/29 20:53
tropical72:我常遇到的問題便是原先空白不可抹掉 04/29 20:54
tropical72:取回動作通常不做,因看起來都是 space XD 04/29 20:55
可是這會有signed/unsigned的問題, 請問有除了255以外的解決方案嗎? 想到用 '\t' 之類的應該也可以, 只是沒試過~ ※ 編輯: loveme00835 來自: 140.121.197.115 (04/29 21:09)