标题:[求助]编程时遇到很棘手的问题,还望指点!
只看楼主
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
 问题点数:0 回复次数:9 
[求助]编程时遇到很棘手的问题,还望指点!



最近要帮老师做个程序,遇到几个问题,相当头疼!!! 还望各位高手指点

程序中有一步是要把一个dat文件中的数据读进来,格式是这样的:

0.0000E+00 5.0000 255.1236
0.0000E+00 5.0000 255.1236 数据很多,有几千行。
0.0000E+00 5.0000 255.1236
……

1. 怎么处理申请空间的问题,因为它没有告诉有多少行,如果用数组的话没

办法确定空间大小,(double a[??][3])(怎么判断文件有多少行啊); 如果用链表动态申请,会不会影响程序的效率,

因为换一行就要申请一个。请问各位有没有更方便的方法。

2. 还有就是它里面夹杂有 科学计数法表示的数据,我实在是想不出有什么办法,以前都是输出科学计数表示的数据,

现在要读入有点麻烦。如果用 getline()当作字符处理会很烦吧。 还望高手指点一下。

我是相当郁闷啊!!!严重感谢了!








[此贴子已经被作者于2006-11-12 19:03:30编辑过]

搜索更多相关主题的帖子: 空间 dat文件 double 动态 
2006-11-12 18:51
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
得分:0 
各位高手!指点一下吧,哪怕只是思路。

很是郁闷啊!

2006-11-12 19:29
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
对于你这个问题, 你可以使用容器, 比如vector, 使用容器的好处在于你不需要事先关心有多少元素要被存储。 建议你看一下 vector 这一章节。 

如何在读入行后提取数据, 建议你看一下 strtok(...) 函数
http://www.cplusplus.com/ref/cstring/strtok.html

那个科学计数法的表示你怎么处理取决于的程序的要求是什么, 你可以为此单独写一个处理函数。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-11-12 23:11
夜归人
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-11-11
得分:0 
恩~恩~ 有kai大师在,什么C++难题都能解决

我睡着听爱情走过,路上大雨滂沱.
2006-11-12 23:30
夜归人
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-11-11
得分:0 

好久没接触STL了,楼主的问题我现在只会用其它语言实现。。。

想问楼主,你是想一起过读出来存到内存吗?


我睡着听爱情走过,路上大雨滂沱.
2006-11-12 23:32
夜归人
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-11-11
得分:0 
“怎么判断文件有多少行啊”


C++好象是这样

while(char* a=getline(fileio)!=null)
{
...
}

到读取的为空行时自然会跳出

而分隔和处理科学计数法就用kai大师那个函数就可以

我睡着听爱情走过,路上大雨滂沱.
2006-11-12 23:35
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
楼上的那位老师傅, 请你不要 "大师" "大师" 的称呼。 
拿我当朋友的就叫我一声 kai 就可以了。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-11-13 00:30
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
八戒,为师还年轻,怎么可以说我老呢~~~

你好歹是个出家人,我叫你大师也不为过……
2006-11-13 10:10
半神巫妖
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-7-14
得分:0 
如果觉得stl性能不强的话,的确可以通过计算行数来申请内存,因为根据lz贴出的样例,每行的数据量是固定的,除了最后一行没有0D 0A两个字节的结束换行符外,其他行都是36的字节大小,所以行数可以通过下面方法获取:
首先获取文件实际大小ulSize
行数也就等于(ulSize - 34) / 36 + 1,表达式的解释:先减去最后一行的大小,然后除以每行的大小,最后再加上开始减去的最后一行(即+1)
这样的话就可以一次性申请所有行的内存了,不用担心性能问题

2006-11-13 11:18
xfeng
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-6-1
得分:0 
感谢各位了!

用vector可以了,挺方便的 又学了点东西

科学计数打算先按字符读入再用atof转,实在不行只得另外编一个函数了

2006-11-13 16:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-102470-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014704 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved