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你的if语句的部分,你设置的值current,但从不写出来,所以写出来的都是以大写字母开头的(而且,正如其他人指出的那样,你的循环条件不正确) .

如果我这样做,我的结构会有所不同。我会写一个小函子来加密一个字母:

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 回答