[問題] C語言 input不太規則怎麼辦?

看板C_and_CPP (C/C++)作者 (啊啊啊啊啊~)時間13年前 (2012/11/22 15:16), 編輯推噓4(4016)
留言20則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 應該沒有 問題(Question): input的資料有點雜亂 不知道該怎麼下手... 餵入的資料(Input): {[2],[s2 1999],[Prince],[(Jolee,7),(Naveah,6),(Ansleigh,8),(Kaitlin,9),(Arina,8),(Itzel,9),(Gentry,4),(Naiya,5)]} {[3],[s3 #1],[Nelly],[(Gisselle,6),(Zyaire,1),(Jana,1),(Aiyanna,0),(Regan,10),(Amayrani,0),(Jetta,4),(Lani,0),(Carlyn,8),(Alisha,10),(Naina,7),(Aubriee,7),(Kadie,1),(Haidyn,7)]} { [4], [s4 I Wanna Be A Billionaire], [Travie McCoy Feat, Bruno Mars], [(Michael, 6), (Mason, 2), (Sophia, 1)] } : : : 補充說明(Supplement): 學了大概1~2個月的c語言 我對於這種不太規則的input真的很頭痛 大概的input規則是 每一行資料都會有這樣的形態:{[], [], [], [(),(),()...()]} 每行資料都用大括號標起來 中括號間用", "分隔 每行裡可能會在不同的地方有空白 第一個中括號裡是不會重覆的整數 第二個裡面會有至少一個空格 第三個可能會出現逗號 第四個則會包含不知道幾個(人名, 數字<=10)型態的資料 我的想法是把fgets()寫進while loop裡 先用fgets()取一行來處理這行的資料 處理完後再取第二行 需要的是第一個和第四個括號內的資料 括號要去掉 目前是考慮用sscanf()或scanf()來取資料 可是由於scanf()會一直讀到出現空格 所以第一行一開始會讀到"{[2],[s2" 第三行只會讀到"{" 請各位給我一些處理這些資料的建議orz 或者我必需要寫好幾個loop來一個一個檢查修改用scanf()讀到的東西? 由於讀取後的資料之後會被用在其他地方 所以我打算把資料存到一個三維的array 大概像這樣: [數字1] [數字2] ... 2 人名1 人名2 ... [數字3] [數字4] ... 3 人名3 人名4 ... [數字5] [數字6] ... 4 人名5 人名6 ... 2,3,4 是第一維 人名第二維 數字第三維這樣 -- 第一次發問 而且剛開始學C 有什麼做得不好或觀念錯得太離譜的地方請不吝指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 173.181.107.8

11/22 15:19, , 1F
(1)想辦法找regex來用(2)或者配合狀態機使用stack
11/22 15:19, 1F
google了一下 這兩個我都不會用orz 基本上我是比較prefer只用stdio和string.h 我可能還是寫大量loop來處理這些東西比較保險 感謝你給我建議 ※ 編輯: spark0409 來自: 173.181.107.8 (11/22 15:51)

11/22 16:43, , 2F
(3)不然用strstr()一直硬幹也可以啦
11/22 16:43, 2F

11/22 16:44, , 3F
狀態機是一種style 會寫的話連string.h都不用
11/22 16:44, 3F

11/22 16:44, , 4F
stack是基本資料結構 也不需要lib就可以寫出來
11/22 16:44, 4F

11/22 17:10, , 5F
要嘛就完全靠自己,不要用 sscanf 這類,慢慢研究當磨鍊
11/22 17:10, 5F

11/22 17:11, , 6F
不想要這麼辛苦,就是用最方便的 regular expression
11/22 17:11, 6F

11/22 17:31, , 7F
這個用JSON比較快吧,不過大推regex((最近才剛學會XD
11/22 17:31, 7F

11/22 17:59, , 8F
(x, 3)這種tuple,json會怎麼轉換?
11/22 17:59, 8F

11/22 18:00, , 9F
我看他只是很像json而已
11/22 18:00, 9F

11/22 20:12, , 10F
打完才發現{}他也不是用hashmap而是類list....
11/22 20:12, 10F

11/22 20:12, , 11F
//還是不太懂雜湊表跟json的關係...
11/22 20:12, 11F

11/22 20:26, , 12F
{}裡面一定是hash 轉換出來就變物件 []才是陣列
11/22 20:26, 12F

11/22 20:40, , 13F
提外話想問, sscanf 算是 "簡易" regular 一種嗎??
11/22 20:40, 13F

11/22 21:17, , 14F
比較prefer.....
11/22 21:17, 14F

11/23 09:34, , 15F
我必須說,連寫什麼都看不懂,有啥prefer可言,科科
11/23 09:34, 15F

11/23 09:34, , 16F
preference可言,科科
11/23 09:34, 16F

11/23 12:03, , 17F
有個關鍵字叫作 LL Parser 編譯器課程會教到
11/23 12:03, 17F

11/23 12:04, , 18F
實作的時候 可以用stack 也可以一條文法配一個function
11/23 12:04, 18F

11/23 12:07, , 19F
順便回覆EdisonX scanf支援regex語法...
11/23 12:07, 19F

11/23 14:01, , 20F
謝謝 D 大, sscanf 支援的 regex 很簡便吧 @@
11/23 14:01, 20F
文章代碼(AID): #1GhT4ydY (C_and_CPP)
文章代碼(AID): #1GhT4ydY (C_and_CPP)