将txt.-文件中单独行上的数字读取到C ++中的数组

时间:2015-01-13 08:18:21

标签: c++ arrays

为了解决Euler Project 8而不诉诸" Big Number"库,我想读取txt.-文件中的单独数字来分隔数组中的点。 txt.-文件中的数字排列如下:

  

094239874 ...... 29837429837 [其中50个],

     

192319274 ...... 12837129873 [50其中]

这样总共有20行50位数,全部由输入分隔。所以我正在尝试编写一个程序,将第一个数字写入数组中的第一个数字并继续此过程(注意空格)直到第1000个数字。我已经尝试在教程和其他地方的网上找到解决这个问题的方法,但我不能让它适用于这个具体的例子。到目前为止我有类似

的东西
 int main() {

 int array[999];
 string trial[999];

 ofstream myfile;
 myfile.open ("example.txt");

 for(i=1 ; i<=1000 ; i++) {
 myfile >> trial;
 // Somehow convert string to int as well in this loop?
 }

4 个答案:

答案 0 :(得分:1)

您可以逐行读取文件,然后将数字添加到数组中,如下所示:

// out of your loop
std::vector<int> digits;
// in your loop
std::string buffer = /*reading a line here*/;
for (auto c : buffer) {
    digits.push_back(c - '0');
}

此外,STL容器优于C风格的数组(std::vector / std::array)。

答案 1 :(得分:1)

我想这就是你正在寻找的东西

int main(void)
{
    unsigned char numbers[20][50];
    FILE *pf = fopen("example.txt", "r");
    for(int i = 0; i < 20; i++)
    {
        // read 50 characters (digits)
        fread(&numbers[i], 1, 50, pf);
        // skip line feed character);
        fseek(pf, 1, SEEK_SET);
    }
    fclose(pf);

    // conversion from ascii to real digits by moving the digit offset (subtracting by the first digit char in ascii table)
    for(i = 0; i < 20*50; i++)
        ((unsigned char*)numbers)[i] -= (unsigned char) '0';

    // the digits are now stored in a 2-dimensional array (50x20 matrix)

    return 0;
}

答案 2 :(得分:1)

您可以尝试这样做(首先将文件内容读入string,然后将每个char转换为int,顺便说一句,您应该使用vector<int>而不是原始数组):

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string str;
    string total;
    ifstream a_file("data.txt");

    while (getline(a_file, str))
        total += str;

    vector<int> vec;

    for (int i = 0; i < total.size(); i++)
    {
        char c = total[i];
        int a = c - '0';
        vec.push_back(a);
    }     
}

答案 3 :(得分:0)

这种方法不起作用。根据{{​​3}},任何内置的整数类型都可能太小而无法表示50位十进制数字的值。