Не существует подходящего конструктора для преобразования из char в std :: string - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в кодировании на 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 - удачная строка? Кто знает? Но , пожалуйста, помогите , Я так запуталась!

...