1

単純な暗号化を行うことが最終的な目標である配列に対していくつかの操作を実行しようとしています。しかし、とにかく私の配列は458文字の長さで、ほとんどが文字といくつかのコンマ、ピリオドなどで構成されています。配列の最後の文字から始めて、最初の文字に移動し、配列内のすべての文字を大文字にしようとしています。最後の文字「」を正しく読み取りますが、forループの次のステップは、4文字を超えて、数文字スキップしたようなものです。制御ロジックに問題がありますか?

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];
        }

    }
}
4

2 に答える 2

2

変化する:

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

に:

for (index = length-1; index >= 0; --index)
于 2012-04-04T15:56:47.087 に答える
1

ステートメントのelse脚では、の値を設定していますが、それを書き出すことはありません。したがって、書き出されるのは大文字で始まるものだけです(そして、他の人が指摘しているように、ループ条件は正しくありません) 。ifcurrent

これを行う場合は、構造が少し異なります。1文字を暗号化するための小さなファンクターを作成します。

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

次に、入力をに入れて、:std::stringを使用して操作します。std::transform

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

std::transform(msg.rbegin(), msg.rend(), 
               std::ostream_iterator<char>(outFile, ""), 
               encrypt());
于 2012-04-04T15:56:26.577 に答える