• 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

0 głosów
1,187 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 (195,220 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 12,755 wizyt
0 głosów
0 odpowiedzi 1,153 wizyt
pytanie zadane 4 grudnia 2021 w Python przez Hanna Osipowicz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,921 wizyt
pytanie zadane 2 grudnia 2017 w C i C++ przez Krystek102 Bywalec (2,440 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,327 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...