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; }