将文件放入c ++中的数组中

时间:2017-05-08 00:44:00

标签: c++

我试图读取txt文件,并将其放入char数组中。但我可以读取包含不同字符长度的不同文件并将它们放入数组中。我可以创建一个包含未知字符长度的动态数组。

4 个答案:

答案 0 :(得分:0)

您可以将未知大小的文件读入动态数据结构,如:

std::vector更多信息here

或者,您可以使用new分配动态内存。但是,至少对我而言,向量更方便:)。

答案 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)))