2012-04-04 10 views
1

私は最終的な目的が単純な暗号化を行うことである配列に対していくつかの操作を実行しようとしています。しかし、とにかく私の配列は長さが458文字で、大半は文字とコンマ、ピリオドなどで構成されています。配列の最後の文字から始めて、最初の文字と大文字の配列のすべての文字に行きます。それは最後の文字 "#"を正しく読み込みますが、forループの次のステップは4文字以上で、いくつかの文字をスキップします。私のコントロールロジックに何か問題がありますか?あなたのif文のelse足でループロジック、暗号化配列C++

void EncryptMessage (ofstream& outFile, char charArray[], int length) 
{ 
    int index; 
    char upperCased; 
    char current; 

    for (index = length-1; index <= length; --index) 
    { 
     if (charArray[index] >= 'A' && charArray[index] <= 'Z') 
     { 
      upperCased = static_cast<char>(charArray[index]); 
      current = upperCased; 
      outFile << current; 
     } 
     else 
     { 
      charArray[index]++; 
      current = charArray[index]; 
     } 

    } 
} 

答えて

2

変更:

for (index = length-1; index <= length; --index) 

へ:

for (index = length-1; index >= 0; --index) 
+0

これは動作しますが、私はランダムな順序で本当に奇妙な出力を得て、文字のどれも大文字ではありません – user1193717

+0

問題は、インデックスの不要な増分が再びあったelse文にありました。 – user1193717

+1

小文字を大文字に変更したいですか? – hmjd

1

、あなたはcurrentの値を設定し、それを書き出すことはありませんので、書き出されますそのすべてが他の人が指摘したように、どのような大文字として開始(とされていますループ状態が正しくありません)。

私がこれをやっていたら、少し違った構成になります。その後、私はstd::stringへの入力を入れ、std::transformを使用して、それを操作したい

struct encrypt { 
    char operator()(char input) { 
     if (isupper(input)) 
      return input; 
     else 
      return input+1; 
    } 
}; 

:私は、単一の文字を暗号化するために、小さなファンクタを書きたい

std::string msg("content of string goes here."); 

std::transform(msg.rbegin(), msg.rend(), 
       std::ostream_iterator<char>(outFile, ""), 
       encrypt());