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ć.