Project Euler Problem 8をC++で解決しようとしています。問題は1000桁の数字の中で5つの連続する数字の中で最大のものを見つけることです。ですから、ファイルioを使用して数値をchar配列に読み込んで、後で整数に変換する方法を理解しようとしています。最後の行の最後の3分の1を除いて読んだ作品は、私は奇妙な線、緑のランタンのシンボル、そして心臓を得る。ファイルからの入力からの読み込みで奇妙な記号が表示される
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int maxNum = 1000;
char buffer[maxNum];
char *bufferPointer = buffer;
ifstream infile;
infile.open("numberlist.txt");
if (!infile)
{
cerr << "Error: Open file failure" << endl;
return -1;
}
infile.read(bufferPointer, streamsize(maxNum));
infile.close();
cout << buffer << endl;
return 0;
}
これは、txtファイルが含まれているものです:
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
編集:私はこの問題を掲載直後、私はただ問題は、読み取りが新しいを読んでいるという事実であるかもしれない実現したがって配列はそれをすべて保持するのに十分な大きさではありません。あなたがのstd ::文字列の代わりに、文字の
これはおそらく修正しまう問題のプレーンな配列を使用してに切り替えた場合
を使用することができます
vector<char> v
で、テキストは1038文字の長さで、私は理由を理解することはできません。私はそれぞれ50文字の20行を数え、19行の新しい行を考えると、私は指を置くことができないものの2倍の量があります。 –
@ L1th1um:UNIXスタイルのテキストファイルは、改行として1文字(LF)を使用します。 Windowsスタイルのテキストファイルは、改行として2文字(CR/LF)を使用します。テキストファイルの作成に応じて、正確な文字数が異なる場合があります。 – goldPseudo