为了解决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?
}
答案 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位十进制数字的值。