2012-04-04 104 views
1

我想对数组执行一些操作,最终目标是做一个简单的加密。但无论如何,我的数组长度为458个字符,主要由字母和一些逗号,句点等组成。我尝试从数组的最后一个字符开始,并转到数组中的第一个字符和大写字母。它会正确读取最后一个字符“”,但是for循环中的下一步就像4个字符并略过几个字母。我的控制逻辑有问题吗?循环逻辑,加密数组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 2012-04-04 15:59:48

+0

没关系问题是在else语句中,索引再次增加了一个不必要的增量。现在完美工作 – user1193717 2012-04-04 16:05:16

+1

你想只将小写字母改为大写字母吗? – hmjd 2012-04-04 16:06:01

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());