• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porządkowanie tekstu według klucza - szyfr kolumnowy

Object Storage Arubacloud
0 głosów
478 wizyt
pytanie zadane 30 sierpnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)

Mam za zadanie napisać program, który pobierze z pliku szyfr-kolumnowy.txt znajdujący się w pierwszej linii szyfrogram i w kolejnej klucz, za pomocą którego zaszyfrowano tekst w szyfrze kolumnowym. Klucz składa się z cyfr dziesiętnych oznaczających numery porządkowe kolumn, tzn. klucz 2031 oznacza, że najpierw przy szyfrowaniu pobiera się znaki z kolumny nr 2, później z kolumny nr 0, itd. wierszami od góry do dołu.

Pomyślałem, aby najpierw uporządkować szyfrogram tak, aby później łatwiej dopisywać do ostatecznego wyniku poszczególne znaki. Na początku pobieram szyfrogram i klucz, następnie podejmuję próbę uporządkowania szyfrogramu do zmiennej porzadek:

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int Przeszukaj(string s, int l)
{
    int i = 0;
    while(s[i]!=char(l+'0'))
    {
        i++;
    }
    return i;
}

int main()
{
    ifstream plik("szyfrogram-kolumnowy.txt");
    string szyfrogram, klucz, porzadek="", cyfra;
    int k = 1;
    while(!plik.eof())
    {
        if(k==1)
        {
            getline(plik, szyfrogram);
            k++;
        }
        else getline(plik, klucz);
    }
    plik.close();
    int wiersze = szyfrogram.size()/klucz.size();
    for(int i = 0; i < klucz.size(); i++)
    {
        cyfra = to_string(i);
        porzadek += szyfrogram.substr(wiersze*klucz.find(cyfra), wiersze);
    }
    cout << porzadek;
    return 0;
}

Program ma zamienić iterator na zmienną typu napisowego, następnie znaleźć pozycję tego iteratora w kluczu, później zapisać do zmiennej porzadek jako podciąg szyfrogramu odpowiednią ilość znaków (odpowiadającą ilości wierszy) od wyznaczonej pozycji.

Dla szyfrogramu RAA TJOMNJ NPRWESAGOIEFE (składającego się z 24 znaków - razem ze spacją) i klucza 1203 powinniśmy uzyskać w zmiennej porzadek napis PRWESARAA TJOMNJ NGOIEFE. Dalej odczytywał by odpowiednie znaki z tej zmiennej i zapisywał je do zmiennej wynik, otrzymując napis PROGRAMOWANIE JEST FAJNE (tej części programu oczywiście jeszcze nie ma). 

Jak widać w kodzie chciałem wyświetlić zawartość zmiennej porządek, jednak nic w niej nie ma. W czym może leżeć problem?

Próbowałem opisać to najbardziej dokładnie, ale też najbardziej zwięźle, jak potrafię. W razie pytań proszę pisać. 

1
komentarz 31 sierpnia 2022 przez j23 Mędrzec (194,920 p.)
while(!plik.eof())
    {
        if(k==1)
        {
            getline(plik, szyfrogram);
            k++;
        }
        else getline(plik, klucz);
    }

Skoro w pliku są dwie linie, to po co ta pętla? Tak nie wystarczy:

getline(plik, szyfrogram);
getline(plik, klucz);

?

komentarz 31 sierpnia 2022 przez Noizz00 Użytkownik (910 p.)
Wystarczy, dzięki! Problem rozwiązany :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 10,712 wizyt
0 głosów
0 odpowiedzi 643 wizyt
pytanie zadane 4 grudnia 2021 w Python przez Hanna Osipowicz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,492 wizyt
pytanie zadane 2 grudnia 2017 w C i C++ przez Krystek102 Bywalec (2,440 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...