Witam!
Stworzyłem program szyfrujący metodą kolumnową. Nie jest ważne o co w nim chodzi bo wszystko działa do puki do zaszyfrowania mam tekst bez spacji. Po kilku próbach odkryłem, że błąd jest w złym wyliczaniu ilości znaków tekstu. Mam funkcję, która przesuwa znaki tak, by zniknęły spacje. Moje pytanie: Czemu tekst w tej funkcji po usunięci 2 spacji ma np. 9 znaków, a po przekazaniu do funkcji main() liczba tych znaków rośnie z powrotem do 11 (+2 spacje) skoro zostały one usunięte, a po wyświetleniu cout<<haslo; tekst jest scalony tzn. bez spacji?
//szyfrowanie metoda kolumnowa
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
string cut_string(string tekst){
int dlugosc = tekst.size();
for(int i=0; i<dlugosc; i++){
if(tekst[i] == ' '){
dlugosc--;
for(int j=i; j<dlugosc; j++){
tekst[j] = tekst[j+1];
}
tekst[dlugosc] = '\0';
}
}
cout << "tekst: " << tekst << endl;
cout << "dlugosc: " << dlugosc << endl;
return tekst;
}
string szyfruj(string txt, int ilosc_kolumn){
//nie wiem czmu dlugosc tekstu jest nieadekwatna do prawdziwej
string tekst = cut_string(txt);
string zakodowany_tekst;
int key;
cout << "Podaj klucz skladajacy sie z " << ilosc_kolumn << " znakow (0-" << ilosc_kolumn-1 << ")"; cin >> key;
int dlugosc = tekst.size();
cout << "dlugosc: " << dlugosc << endl;
int T[ilosc_kolumn];
for(int i=0; i<ilosc_kolumn; i++){
T[i] = (int) key/pow(10,ilosc_kolumn-1-i);
key = key - (T[i])*pow(10,ilosc_kolumn-1-i);
cout << T[i] << "\t";
}
int k=0, j=T[k];
for(int i=0; i<dlugosc; i++){
zakodowany_tekst = zakodowany_tekst + tekst[j];
// cout << "Za: " << zakodowany_tekst << endl;
j = j + ilosc_kolumn;
if(isalnum(tekst[j]) == false) {
j = T[++k];
// cout << "WESZLO!!" << endl;
}
}
return zakodowany_tekst;
}
int main(){
string tekst;
int ilosc_kolumn;
cout << "Podaj tekst jawny: "; getline(cin, tekst);
cout << "Podaj ilosc kolumn: "; cin >> ilosc_kolumn;
cout << "Tekst zaszyfrowany: " << szyfruj(tekst, ilosc_kolumn);
return 0;
}