开发平台(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++,依照书本上的读档,
是宣告一个死的阵列给他,但我想学习如何运用动态阵列,上面是读整个档案
若此问题解决,依行读取也使用动态阵列,在内存配置上会来的有效率,
认真想学习,谢谢大家。
作者:
gride2 (CK)
2014-08-13 11:15:00file.tellg(), then new char[xxx].
如果使用了file.tellg(),这样的话其实也不用动态了因为她就直接回传你资料长度了吧,除非你要分行读这样的解释不知是对是错?
作者:
lNishan (紫小霓)
2014-08-13 12:43:00这问题用动态阵列没意义如果你要memory efficient,一个一个字符读+输出就行了如果一行一行读,程式执行中占用最大的内存是sizeof(char)*(最长的字串长度+1)如果已知最长是300,你就直接开300就好不断使用new、delete反而会消耗额外时间
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:00getline()可以用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