改行文字はc ++で何らかの特別な意味を持っていますか? 非ASCII文字ですか?
大きなテキスト内の一意の n 文字の部分文字列ごとにマルコフ連鎖を構築しようとしています。新しい一意の部分文字列に遭遇するたびに、その値が 256 要素のベクトル (拡張 ASCII テーブルの文字ごとに 1 つの要素) であるマップに入力します。
ファイルの内容全体を出力しても問題ありません (「行」は、ifstream と getline を使用して作成されたテキスト行のベクトルです)。
for(int i=0; i<lines.size(); i++) cout << lines[i] << endl;
テキスト ファイル全体がコンソールに表示されます。この問題は、char を予期している関数に改行文字を返そうとすると発生します。「moveSpaces」は、反復ごとに文字列のベクトル内で何文字先に移動するかを決定する整数定数です。
char GetNextChar(int row, int col){
for (int i=0; i<MOVESPACES; i++) {
if (col+1<lines[row].size()) {
col+=1;
} else { // If you're not at the end of the line keep going
row+=1; // Otherwise, move to the beginning of the next row
col=0;
}
}
return lines[row].at(col);
}
私はデバッガーを使いこなしましたが、2 行目の 1 列目に到達すると、エラーも何も発生しませんでした。呼び出し関数ではなく、この関数内で失敗します。
私が使用しているファイルは A Christmas Carol (Project Gutenberg で最初に登場したもの) です。参考までに、最初の数行を次に示します。
STAVE I: MARLEY'S GHOST
MARLEY was dead: to begin with. There is no doubt
whatever about that. The register of his burial was
関数は、2 行目の最初の文字を返す必要があるときに中断します。これは、改行を削除した場合、またはプログラム内で「行」ベクトルを自分で 1 行ずつ作成した場合には発生しません。何が問題なのですか?