如何将凯撒密码的元素从字符串更改为字符串

How to change elements from string to string for Caesar Cipher

我需要从我创建的字母表中分配用户输入的字符串

using namespace std;

int main() {
  setlocale(LC_ALL, "Turkish");
  string str1;
  string alphabet[29] = {"a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h",
                         "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p",
                         "r", "s", "ş", "t", "u", "ü", "v", "y", "z"};

  cout << "Enter sentence";
  getline(cin, str1);

  for (int i = 0; i < str1.length(); i++) {
    for (int j = 0; j < 29; j++) {
      if (alphabet[j].compare(string(1, str1.at(i))))

      {
        j = (j + 3) % 29;

        str1.assign(alphabet);
        break;

      }  // if
    }    // for(j)

  }  // for(i)

  cout << "Encrypted message is:-->" << str1 << endl;

  return 0;
}

输入的字符串中的每个字母必须是 3 步。但是这段代码不起作用。

赋值 不是正确的函数。

你需要另一个变量,我们可以说 std::string str2;

尝试使用 str2.append(alphabet[j]) 而不是 str1.assign(alphabet)

在循环结束时,您将在 str2 中加密您的字符串。

试试这个代码:

int main() {
  setlocale(LC_ALL, "Turkish");
  string str1;
  string str2;
  string alphabet[29] = {"a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h",
                         "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p",
                         "r", "s", "ş", "t", "u", "ü", "v", "y", "z"};

  cout << "Enter sentence";
  getline(cin, str1);

  for (int i = 0; i < str1.length(); i++) {
    for (int j = 0; j < 29; j++) {
      if (alphabet[j] == str1.substr(i,1))

      {
        j = (j + 3) % 29;

        str2.append(alphabet[j]);
        break;

      }  // if
    }    // for(j)

  }  // for(i)

  cout << "Encrypted message is:-->" << str2 << endl;

  return 0;
}