2016-03-25 8 views
-1

クラスの場合、エンコーダプログラムで作業しています。それは、メッセージファイルを文字ごとに比較し、最初に一致する文字をブックファイルと比較し、ブックファイル内のその文字の位置をコード化されたファイルに送信するだけです。しかし、いったんそのキャラクターを再度検索しなければならないと、そのキャラクターの次の出現を見つけなければなりません。 たとえば、「He​​llo 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" コード化されたファイルです。

私はイテレーターに間違ったことをしていますが、私の人生では何が分かりませんか?

+0

これはどのようなエンコードですか? – Havenard

+0

'startingPosition [(int)asciiValue] = j + 1'ではないでしょうか? –

+0

@ScottHunterは、魅力のように動作します、10億に感謝します。 – Frankjoww

答えて

0

startingPosition[(int)asciiValue]は、count+1ではなく、j+1に設定する必要があります。

関連する問題