我正在尝试对阵列执行某些操作,最终目标是进行简单加密。但无论如何我的数组是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];
}
}
}
答案 0 :(得分:2)
变化:
for (index = length-1; index <= length; --index)
为:
for (index = length-1; index >= 0; --index)
答案 1 :(得分: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());