改行文字は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列目になるとき、それは私にアウトクラップスない - エラーか何かを。呼び出し元関数ではなく、この関数内で失敗します。
私が使用しているファイルは、クリスマスキャロル(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行ずつベクタを作成した場合には発生しません。どのようなアイデアが間違っている?
「moveSpaces」とは何ですか? –
私のデバッガは決して私を欺くことはありません...あなたのことはまあまあまあまあまあです。 –
正直なところ、私はこの質問の頭や尾を作ることができません。 「失敗する」とはどういう意味ですか? – MSalters