C_and_CPP 板


LINE

※ 引述《sinclair ( )》之銘言: : ※ 引述《sinclair ( )》之銘言: : : 最近剛開始接觸程式,覺得很有趣,但對C++的指令還很生疏, : : 想請教大家一個問題。假設我需要讀取一個.txt檔, 檔案的內容如下: : : NET n1 { c12 c78 }NET n2 { c190 c57 c76 c80 }NET n3 { c191 c59 } : : 以上只是其中一小部份, 在讀完整個檔案之前,並不知道有多少個Net與cell : : 我希望能用一個陣列Data[number of Net][number of cell]來記錄檔案的資料, : : 我的想法是每次讀取一行字串,如"NET n1 { c12 c78 }", 當發現"Net n"就把緊跟 : : 在後面的數字紀錄下來,得到'1',當發現c就記錄後面的數字,得到12與78。在讀取完 : : 一個字串後將Data[0][11],Data[0][77]的內容紀錄為1, 讀取完第二個字串時 : : 紀錄Data[1][189],Data[1][189],Data[1][56],Data[1][75],Data[1][79]為1, : : 以此類推... 是不是要做出一個 matrix,裡頭的格子大部份都是 0 少部份是 1? :  關於讀檔的問題,我已經寫出來了,附上程式碼如下, :  但現在碰到一個問題。在還沒讀檔之前, :  我不知道 Data[][]的陣列大小要設定多少, : 就先宣告為Data[5000][5000], 請問能不能教我 : 如何用動態陣列或任何其他方法,在完成讀檔的動作後 : 使陣列大小剛好等於net(最大值)乘cell(最大值) 很堅持要用原始的 array 嗎?還是可以接受 std::vector 呢? 用 vector<vector<int> > 會好寫一點。用原始的 array 就要 先用 alloc() 函式來分配相當大、足夠大的空間出來,要 malloc() 兩次,第一次 malloc() 第一維,第二次 malloc() 第二維。讀入的過程,有一個 maxcell 變數在記錄最大的 cell 編號,讀完以後,就以此編號做為第二維的最大值,另外,所附 的程式中的 net 已經可以記錄最大的 net 數,所以第一維已經 沒問題了。 最後,就是做縮小陣列的動作,用 realloc() 剁掉多出來的部 份,也是要做兩次,一次是針對第一維,一次是針對第二維, 哪個先做都無妨。 至於用 vector<vector<int> > 的話,一開始是宣告成 vector<vector<int> > Data(5000, vecotr<int>(5000)); 後面的縮小動作,因為 vector 有現成的 vector::resize() 可用,就方便多了。 : #include <iostream> : #include <fstream> : #include <iomanip> : using namespace std; : const int num_net=5000; : const int num_cell=5000; : int Data[num_net][num_cell]; : void main() : { : char buffer=0; : int temp=0; : int net=0; : int cell=0; : fstream inFile; : inFile.open("test.in"); : while(!inFile.eof()) : { : inFile.get(buffer); : if (buffer=='n') :    { : do : { : inFile.get(buffer); : if (buffer=='c') : { : inFile >> temp; : cell=temp; : Data[net][cell-1]=1; : } : }while(buffer!='}'); : net++; : } : } : } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.168
1F:推 sinclair:謝謝!我大概知道怎麼宣告動態多維陣列了.. 210.58.30.217 09/02
2F:→ sinclair:請問用vector要如何resize呢? 謝謝! 210.58.30.217 09/02







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP