我试图读取txt文件,并将其放入char数组中。但我可以读取包含不同字符长度的不同文件并将它们放入数组中。我可以创建一个包含未知字符长度的动态数组。
答案 0 :(得分:0)
答案 1 :(得分:0)
#include <vector>
#include <iostream>
#include <fstream>
int main(int argc, char **argv)
{
std::vector<std::string> content;
if (argc != 2)
{
std::cout << "bad argument" << std::endl;
return 0;
}
std::string file_name (argv[1]);
std::ifstream file(file_name);
if (!file)
{
std::cout << "can't open file" << std::endl;
return 0;
}
std::string line = "";
while (std::getline(file, line))
{
content.push_back(line);
line = "";
}
for (std::vector<std::string>::iterator it = content.begin(); it != content.end(); ++it)
std::cout << *it << std::endl;
}
这是使用std :: vectors和std :: string
的解决方案程序将文件名作为第一个参数,打开它,逐行读取
每一行都写在矢量
中然后你可以像我在函数末尾那样显示你的向量
编辑:因为C ++ 11是新标准,程序使用C ++ 11然后你必须使用c ++ 11编译它(如果你使用g ++,则g++ -std=c++11
)
我刚测试它完美无缺
答案 2 :(得分:0)
可能存在可用的库例程,它们可以在不读取文件内容的情况下为您提供文件大小。在这种情况下,您可以获取大小并分配一个完整大小的缓冲区,并立即吸入整个文件[如果您的缓冲区是一个简单的char数组,请不要忘记添加一个并放入尾随的nullchar]。 / p>
答案 3 :(得分:-3)
最好的方法是使用malloc()
,realloc()
和free()
,就像使用旧的C程序一样。如果您尝试使用std::vector
,那么当realloc()
无法做到std::vector
时,#include <iostream>
#include <tuple>
// TODO perhaps you want an auto-management class for this tuple.
// I'm not about to type up the whole auto_ptr, shared_ptr, etc.
// Mostly you don't do this enough to have to worry too hard.
std::tuple<char *, size_t> getarray(std::istream &input)
{
size_t fsize = 0;
size_t asize = 0;
size_t offset = 0;
size_t terminator = (size_t)-1;
char *buf = malloc(asize = 8192);
if (!buf) throw std::bad_alloc();
char *btmp;
char shift = 1;
do {
try {
input.read(buf + offset, asize - fsize);
} catch (...) {
free(buf);
throw;
}
if (input.gcount == 0) {
btmp = realloc(buf, bufsize);
if (btmp) buf = btmp;
return std::tuple<char *, size_t>(buf, fsize);
}
offset += input.gcount;
fsize += offset;
if (fsize == asize) {
if (shift) {
if ((asize << 1) == 0)
shift = 0;
else {
btmp = realloc(buf, asize << 1);
if (!btmp)
shift = 0;
else {
asize <<= 1;
buf = btmp;
}
}
if (!shift) {
btmp = realloc(buf, asize += 8192);
if (!btmp) {
free(buf);
throw std::bad_alloc();
}
}
}
}
} while (terminator - offset > fsize);
free(buf);
// Or perhaps something suitable.
throw "File too big to fit in size_t";
}
可能会增长和缩小(增长取决于堆,同时保证收缩)如此。
特别是:
def read_output(file_name):
f = open('file_name.txt')
data = [float(line.rstrip()) for line in f]
biggest = min(data)
smallest = max(data)
print("Biggest: {}".format(biggest))
print("Smallest: {}".format(smallest))
print("Average: {}".format(sum(data)/len(data)))