1

我在创建一个使用用户输入的轮换数加密单词的函数时遇到了一些问题。这是我到目前为止所拥有的:

string encryptWord(string word, int num)
{
  string newWord;
  newWord = word;
  for(int i = 0; i < word.length(); i++)
    {
      newWord[i] = tolower(word[i]);
      if((word[i] >= 'a') && (word[i] <= 'z'))
        {
          newWord[i] = word[i] + (num % 26);
          if(newWord[i] > 'z')
            newWord[i] = newWord[i] - 26;

        }
    }
  return newWord;

}

现在在我的主要测试中

cout << encryptWord("xyz", 6);

我得到的输出是:de

同样,对于解密我有

string decryptRotWord(string word, int num)
{
  string newWord;
  num = num % 26;
  int index;
  for(int i = 0; i < word[i]; i++)
    {
      newWord[i] = tolower(word[i]);
      if(word[i] >= 'a' && word[i] <= 'z')
        {
          index = word[i] - num;
          if(index < 'a')
              index = index + 26;
          newWord[i] = index;
        }
    }
  return newWord;

}

但是,对于这个,当我测试时它不会输出任何东西

cout << decryptRotWord("vdds", 2);
4

2 回答 2

0

当您的for循环到达字母'z'时,它确实如此'z' + 6。但这超出了char(127) 的最大长度。你会得到一个未定义的行为。

您应该实施一种从'a'检查加密超出时开始计数的方法'z'

对于解密,如前所述,您要测试:

i < word.length()
于 2015-09-24T05:14:13.687 回答
0

在您的解密功能中,我认为您在循环结束条件上有一个错误:

for(int i = 0; i < word[i]; i++)

与加密函数一样,您应该迭代长度

for(int i = 0; i < word.length(); i++)

于 2015-09-24T04:31:56.537 回答