[问题] C++_动态阵列_读档

楼主: redonizuka (R大)   2014-08-13 10:14:38
开发平台(Platform): QtCreator
问题(Question):利用动态阵列读档是否有达到动态效果? 以及如何验证?
喂入的资料(Input): .txt
1 10
100 200
201 210
900 1000
预期的正确结果(Expected Output):
1 10
100 200
201 210
900 1000
错误结果(Wrong Output): None
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream file;
char *buffer = new char[300];
file.open("C:\\Users\\redon_000\\Desktop\\QT\\Uva_3n_add_1\\TestFile.txt",ios::in);
if(!file)
cout <<"The file didn't open"<<endl;
else
{
file.read(buffer,300);
cout <<buffer<<endl;
file.close();
}
delete [] buffer;
return(0);
}
补充说明(Supplement): 目前初学C++,依照书本上的读档,
是宣告一个死的阵列给他,但我想学习如何运用动态阵列,上面是读整个档案
若此问题解决,依行读取也使用动态阵列,在内存配置上会来的有效率,
认真想学习,谢谢大家。
楼主: redonizuka (R大)   2014-08-13 10:15:00
首先想知道这样的写法是有达到动态阵列吗?
作者: gride2 (CK)   2014-08-13 11:15:00
file.tellg(), then new char[xxx].
楼主: redonizuka (R大)   2014-08-13 11:48:00
如果使用了file.tellg(),这样的话其实也不用动态了因为她就直接回传你资料长度了吧,除非你要分行读这样的解释不知是对是错?
作者: lNishan (紫小霓)   2014-08-13 12:43:00
这问题用动态阵列没意义如果你要memory efficient,一个一个字符读+输出就行了如果一行一行读,程式执行中占用最大的内存是sizeof(char)*(最长的字串长度+1)如果已知最长是300,你就直接开300就好不断使用new、delete反而会消耗额外时间
楼主: redonizuka (R大)   2014-08-13 12:52:00
lN大,若一行一行读的话我也要先定义BUFFER的大小目前我已知的file.tellg()可知整份文件的长度但要取得最长字串的长度,有更明显的提示吗?我认同你上述的说法,若300那数字能在自动一点我就可以通用于任何TXT文件,请求指教
作者: lNishan (紫小霓)   2014-08-13 13:05:00
那你就每次都读一个character就好如果题目需要分行,那就用循环读到换行字符通常这类讯息(eg. 字串最长多少) 问题都会specify出来或是你写好程式,自己Specify出来
作者: gride2 (CK)   2014-08-13 13:40:00
我不太清楚你的真正目的为何? 如果单纯要输出每行可使用getline(),再cout出去就好如果照你说的你也不知道每行长度为多少一直使用new/delete,只要你不会memory leak又不怕费时因为我一直以为你想要知道长度...所以前面就回那些..
作者: bibo9901 (function(){})()   2014-08-13 15:14:00
不晓得你的"自动取得"指的是什么?
作者: gride2 (CK)   2014-08-13 15:17:00
getline()可以用string吧?
作者: bibo9901 (function(){})()   2014-08-13 15:17:00
因为不可能预知档案的一行有多少字符, 所以你如果不喜欢在编译时决定长度, 就只能在执行的时候边读取边调整了,getline + string + shink_to_fit 应该很满足你的需求
作者: gride2 (CK)   2014-08-13 15:23:00
如果以你这个方向,面对未知长度,我习惯是先用char *buf不过看你的code也没有要去变更buffer[n]的值,单纯的输出其实使用getline(file,string)即可,不要限制在buffer[x]顶多很多此一举的就是string读完后,再依据string的lenth去宣告char buffer的size
楼主: redonizuka (R大)   2014-08-15 18:22:00
OK,了解,感谢大家,我受益良多

Links booklink

Contact Us: admin [ a t ] ucptt.com