-1
クラスの場合、エンコーダプログラムで作業しています。それは、メッセージファイルを文字ごとに比較し、最初に一致する文字をブックファイルと比較し、ブックファイル内のその文字の位置をコード化されたファイルに送信するだけです。しかし、いったんそのキャラクターを再度検索しなければならないと、そのキャラクターの次の出現を見つけなければなりません。 たとえば、「Hello world」とも呼ばれるブックファイルを使用して「Hello world」をエンコードするとします。私は何を取得する必要は、代わりに私は何を得る "0 1 2 2 4 5 6 4 8 9 10 11"C++エンコーダプログラムで重複した文字が正しくエンコードされない
for (unsigned int i = 0; i < messageFileVector.size(); i++)
{
asciiValue = messageFileVector[i];
if (asciiValue < 128 || asciiValue >= 0)
{
count = startingPosition[(int)asciiValue];
for (unsigned int j = (unsigned int)startingPosition[(int)asciiValue]; j < (int)bookFileVector.size(); j++)
{
if (count == bookFileVector.size() - 1)
{
count = 0;
j = 0;
}
if (messageFileVector[i] == bookFileVector[j])
{
startingPosition[(int)asciiValue] = count + 1;
codedFile << j << " ";
break;
}
}
count++;
continue;
}
else
{
cout << "Error: message has non-ascii characters" << endl;
codedFile.clear();
return EXIT_FAILURE;
}
であると言い、 "0 1 2 3 4 5 6 7 8 9 10 11" コード化されたファイルです。
私はイテレーターに間違ったことをしていますが、私の人生では何が分かりませんか?
これはどのようなエンコードですか? – Havenard
'startingPosition [(int)asciiValue] = j + 1'ではないでしょうか? –
@ScottHunterは、魅力のように動作します、10億に感謝します。 – Frankjoww