Я новичок в кодировании на C и C ++, и у меня есть программа с проблемой. Когда я (пытаюсь) запустить его, появляется такая ошибка: «Не существует подходящего конструктора для преобразования из« char »в« std :: string ». Я не уверен, что это означает. Мой код является примером простой шифр подстановки, описанный в книге Эла Свигарта «Коды взлома с Python». Я просто хочу воспроизвести его на C ++. Вот мой код:
#include <iostream> // for communicating with user
#include <string>
using namespace std;
string symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // all symbols
string encrypt(string msg, string key, string mode) {
string ca = symbols;
string cb = key;
string translated;
if (mode == "decrypt") {
ca, cb = cb, ca;
}
int index = 0;
for (index = 0; index < msg.length(); index++) {
cout << "index is " << index << endl;
int sindex = ca.find(msg[index]); // it works here
cout << "sindex is " << sindex << endl;
string cl = cb[sindex]; // the problem
translated += cl;
}
return translated;
}
int main() {
string msg = "";
string key = "";
string mode = "";
string ciphertext = ""; // our variables
cout << "Enter message: (no spaces please)\n";
cin >> msg;
cout << "Enter key (or \"none\" for using default):\n";
cin >> key;
if (key == "none") {
key = "QWERTYUIOPASDFGHJKLZXCVBNM";
}
cout << "Enter mode: (\"encrypt\" or \"decrypt\")\n";
cin >> mode;
ciphertext = encrypt(msg, key, mode);
cout << "The ciphertext is\n" << ciphertext;
}
По какой-то причине он работает с msg
в строке 17, но не с cb
в строке 19, хотя они оба std :: string. Фактическая ошибка находится в строке 19 с string cl = cb[sindex];
. Даже не уверен, что не так. Он работает в строке 17 int sindex = ca.find(/*The thing here*/msg[index]);
. (Может быть, моя Visual Studio 2019 сошла с ума.) Если я заменю cb
на msg
, это все равно даст мне ту же ошибку. Может, строка 17 - удачная строка? Кто знает? Но , пожалуйста, помогите , Я так запуталась!