【问题标题】:Loop not processing the last character of a string循环不处理字符串的最后一个字符
【发布时间】:2015-06-02 05:01:10
【问题描述】:

基本上,除了不包括解密的最后一个字母之外,(Vigenere)解密工作完美。例如,m_text 的解密产生 48 个字母而不是 49 个字母。我什至尝试操纵循环,但效果不佳,因为使用 .at() 会出现超出范围的异常。任何帮助,将不胜感激!

using namespace std;
#include <string>
#include <iostream>


int main()

{
  string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  string m_text = "ZOWDLTRTNENMGONMPAPXVUXADRIXUBJMWEWYDSYXUSYKRNLXU";

  int length = m_text.length();

  string key = "DA";

  string plainText = "";

  int shift = 0;

  int shift2 = 0;



//Loop that decrypts
for (int k = 0; k < length-1; k+=2)
    {
      //Key 1 shift
      shift = m_text.at(k) - key.at(0);
      //Key 2 shift
      shift2 = m_text.at(k+1) - key.at(1);

      if (shift >= 0)
        {
          plainText += ALPHABET.at(shift);
        }
      else
        {
          shift += 91;
          plainText += (char)shift;
        }

      if (shift2 >= 0)
        {
          plainText += ALPHABET.at(shift2);
        }
      else
        {
          shift2 += 91;
          plainText += (char)shift2;
        }
    }
 cout << plainText << endl;
}

【问题讨论】:

    标签: c++ for-loop off-by-one


    【解决方案1】:

    从表面上看,您一次解码两个字符。因此,当您的字符串中有 49 个字符时,就会剩下一个(不会被处理)。如果你将 m_text 设为 48 个字符,你会发现你得到了正确的结果。

    复制您的密钥以匹配消息的长度可能会更容易,然后逐个字符地进行解码。

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多