Szyfrowanie C++

0

Siemka. Mam problem. Napisałem program, który szyfruje (górnolotne określenie) podany string.
Wg. mnie to nie ma prawa działać, bo odwołuje się do klucza zamiast alfabetu w 33 wersie.
Byłbym wdzięczny, gdyby ktoś mi wytłumaczył.
Używałem jednocześnie string i vectorów, bo nie miałem pomysłu, jak inaczej poszukać litery niż za pomocą find, ani jak wyświetlić inaczej niż za pomocą .at (chociaż, tu dałoby się to zrobić tylko stringiem)
Szyfruje licząc, która literą jest (w tym wypadku) 't' w moim vectorze alfabet, po czym
odliczam tyle samo w vectorze klucz, co daje mi literę 'h'. Tu nie mam żadnych wątpliwości.
Z kolei przy odszyfrowywaniu chciałem wziąć zaszyfrowaną 'h', policzyć, która jest w kluczu,
odliczyć tyle samo w vectorze alfabet i wyświetlić.
To rozwiązanie skutkowało niczym. Po prostu wyświetlało ponownie zaszyfrowany tekst.

Natomiast, gdy zmieniłem vector alfabet na vector klucz, to uzyskuje poprawne rozwiązanie, czego nie rozumiem, bo to
w tym wypadku powinienem dostać zaszyfrowany klucz.

Kiedy w wierszu 32 i 33 odwołuję się do tych samych stringów. Nie ważne czy to alfa, czy key.
Tego też, nie rozumiem.



 #include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    int num {};
    char letter {};

    vector<char> alfabet {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','w','x','y','z',' '};
    vector<char> klucz   {' ','z','y','x','w','v','u','t','s','r','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};
    vector<char> coded;
    string alfa {"abcdefghijklmnoprstuvwxyz "};
    string key  {" zyxwvutsrponmlkjihgfedcba"};

    string text {"test o test"};
    cout << "Przed zakodowaniem: " << text << endl;
    cout << "Po zakodowaniu: ";
    for (auto trying: text)
    {
        num = alfa.find(trying);
        coded.push_back(trying);
        cout << klucz.at(num);
    }

    cout << "\nPo odkodowaniu: ";
    for (int i = 0; i < coded.size();++i)
    {
       letter = coded.at(i);
       num = key.find(letter);       //wiersz 32
       cout << klucz.at(num);      //wiersz 32


    }






    return 0;
}

Proszę o jakieś wyjaśnienie, pozdrawiam

1

Dodałem komentarze a w nich wartości poszczególnych zmiennych, każda kolumna to pojedyncza iteracja. Wystarczy przeanalizować obie pętle. Nie rozumiem czego nie można tu nie rozumieć ;p


 #include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    int num {};
    char letter {};

    vector<char> alfabet {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','w','x','y','z',' '};
    vector<char> klucz   {' ','z','y','x','w','v','u','t','s','r','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};
    vector<char> coded;
    string alfa {"abcdefghijklmnoprstuvwxyz "};
    string key  {" zyxwvutsrponmlkjihgfedcba"};

    string text {"test o test"};
    cout << "Przed zakodowaniem: " << text << endl;
    cout << "Po zakodowaniu: ";
    for (auto trying: text)
    {
        num = alfa.find(trying);            //num   =   18, 4,  17, 18  ...
        coded.push_back(trying);            //coded =   t   e   s   t   ...
        cout << klucz.at(num);              //cout <<   h   w   i   h   ...
    }

    cout << "\nPo odkodowaniu: ";
    for (int i = 0; i < coded.size();++i)
    {
       letter = coded.at(i);                //letter =  t   e   s   t   ...              
       num = key.find(letter);              //num =     7   21  8   7   ...  
       cout << klucz.at(num);               //cout <<   t   e   s   t   ...

    }

    return 0;
}
2

A, dobra. Już wyłapałem mój błąd logiczny.
Dzięki za szybką odpowiedź.
Źle przyposalem wartosc. Coded to powinno byc to cozostalo zaszyfrowane a nie to co jest szyfrowane

Tu podaje końcowy kod źródłowy, w razie jakby komuś miał się przydać.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    int num {};
    char letter {};

    vector<char> alfabet {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '};
    vector<char> klucz   {' ','z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};
    vector<char> coded;
    string alfa {"abcdefghijklmnopqrstuvwxyz "};
    string key  {" zyxwvutsrqponmlkjihgfedcba"};

    string text{}, text1{}, text2{}, text3{};
    cout << "Podaj max. 3 slowa do zaszyfrowania: ";
    cin >> text1;
    cin >> text2;
    cin >> text3;
    text = text1 + " " + text2 + " " + text3;
    cout << "Przed zakodowaniem: " << text << endl;
    cout << "Po zakodowaniu: ";
    for (auto trying: text)
    {
        num = alfa.find(trying);
        coded.push_back(klucz.at(num));
        cout << klucz.at(num);
    }

    cout << "\nPo odkodowaniu: ";
    for (int i = 0; i < coded.size();++i)
    {
        letter = coded.at(i);
        num = key.find(letter);
        cout << alfabet.at(num);
    }


    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1