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++; : } : } : } --
QR Code



※ 发信站: 批踢踢实业坊(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