Problemy z szyfratorem

0

Witam
Mam problem z programem szyfrującym otóż jak pewnie widać w kodzie jest algorytm szyfrujący (na razie tylko case1 w switchu ma ten algorytm!) wynikiem pracy tego algorytmu powinny być litery w ascii zapisane w notatniku. Lecz niestety po skończonej pracy plik wazy 38mb(!) i nie da sie go otworzyc (notatnik crashuje, brak odpowiedzi). Chciałbym wiedzieć co poprawić aby to było poprawnie zrobione. Dziękuje


#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <time.h>
#include <windows.h>
#include <algorithm>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;

char wybor;
char litera;
int litera_ascii;
fstream zaszyfrowanieotwarcie;
fstream zaszyfrowaniezapis;
fstream odszyfrowanieotwarcie;
fstream odszyfrowaniezapis;

string tekstzaszyfrowanie;
string linia1;
string linia2;
string linia3;
string linia4;
string linia5;
string linia6;
string linia7;
string linia8;
string linia9;
string linia10;
string linia11;
string linia12;
string linia13;
string linia14;
string linia15;
string linia16;
string linia17;
string linia18;
string linia19;
string linia20;

int nr_linii=1;

int main()
{
    cout << "Witaj W Szyfratorze v0.1!" << endl;
    cout << "Wybierz Dzialanie:" << endl;
    cout <<"1. Zaszyfruje Tekst"<<endl;
    cout <<"2. Odkoduje Tekst"<<endl;
    wybor=getch();

    switch(wybor)
    {
        case '1':
        {
            cout <<"Prosze umiescic tekst w pliku o nazwie 'dozaszyfrowania' w folderze programu  UWAGA! Max 20linii!!!!!"<<endl;
            cout <<"Kiedy gotowe wcisnij dowolny klawisz"<<endl;
            getch();

            zaszyfrowanieotwarcie.open("dozaszyfrowania.txt", ios::in);
            if (zaszyfrowanieotwarcie.good()==false)
            {
                cout <<"plik nie istnieje!!"<<endl;
                exit(1);
            }
            zaszyfrowaniezapis.open("zaszyfrowanytekst.txt", ios::out | ios::app);

            while(getline(zaszyfrowanieotwarcie,tekstzaszyfrowanie))
            {

                switch(nr_linii)
                {
                    case 1:
                        {
                         linia1=tekstzaszyfrowanie;
                         int dlugosc1=linia1.length();
                         for(int i=0; i=dlugosc1-1; i++)
                         {
                            litera=linia1[i];
                            litera_ascii=static_cast<int>(litera);
                            zaszyfrowaniezapis<<litera_ascii<<endl;

                         }
                         break;
                        }
                    case 2:
                        {
                        linia2=tekstzaszyfrowanie;
                        break;
                        }
                    case 3:
                        {
                        linia3=tekstzaszyfrowanie;
                        break;
                        }
                    case 4:
                        {
                        linia4=tekstzaszyfrowanie;
                        break;
                        }
                    case 5:
                        {
                        linia5=tekstzaszyfrowanie;
                        break;
                        }
                    case 6:
                        {
                        linia6=tekstzaszyfrowanie;
                        break;
                        }
                    case 7:
                        {
                        linia7=tekstzaszyfrowanie;
                        break;
                        }
                    case 8:
                        {
                        linia8=tekstzaszyfrowanie;
                        break;
                        }
                    case 9:
                        {
                        linia9=tekstzaszyfrowanie;
                        break;
                        }
                    case 10:
                        {
                        linia10=tekstzaszyfrowanie;
                        break;
                        }
                    case 11:
                        {
                        linia11=tekstzaszyfrowanie;
                        break;
                        }
                    case 12:
                        {
                        linia12=tekstzaszyfrowanie;
                        break;
                        }
                    case 13:
                        {
                        linia13=tekstzaszyfrowanie;
                        break;
                        }
                    case 14:
                        {
                        linia14=tekstzaszyfrowanie;
                        break;
                        }
                    case 15:
                        {
                        linia15=tekstzaszyfrowanie;
                        break;
                        }
                    case 16:
                        {
                        linia16=tekstzaszyfrowanie;
                        break;
                        }
                    case 17:
                        {
                        linia17=tekstzaszyfrowanie;
                        break;
                        }
                    case 18:
                        {
                        linia18=tekstzaszyfrowanie;
                        break;
                        }
                    case 19:
                        {
                        linia19=tekstzaszyfrowanie;
                        break;
                        }
                    case 20:
                        {
                        linia20=tekstzaszyfrowanie;
                        break;
                        }

                }
                nr_linii++;
            }
            zaszyfrowanieotwarcie.close();
            zaszyfrowaniezapis.close();

            cout<<linia1<<endl;
            cout<<linia2<<endl;
            cout<<linia3<<endl;
            cout<<linia4<<endl;
            cout<<linia5<<endl;
            cout<<linia6<<endl;
            cout<<linia7<<endl;
            cout<<linia8<<endl;
            cout<<linia9<<endl;
            cout<<linia10<<endl;
            cout<<linia11<<endl;
            cout<<linia12<<endl;
            cout<<linia13<<endl;
            cout<<linia14<<endl;
            cout<<linia15<<endl;
            cout<<linia16<<endl;
            cout<<linia17<<endl;
            cout<<linia18<<endl;
            cout<<linia19<<endl;
            cout<<linia20<<endl;

            break;
        }

        case '2':
            {
                cout<<"nic"<<endl;
                break;
            }

        default:
        {
            cout<<"podaj poprawna opcje"<<endl;
            break;
        }
    }

    return 0;
}

```c++
0

Człowieku, słyszałeś o czymś takim jak tablice? :​| Czy jak będziesz miał zaszyfrować 1000 linii to będziesz klepał 1000 zmiennych?

for(int i=0; i=dlugosc1-1; i++)

To nie ma sensu, przypisanie zamiast porównania (powinieneś sprawdzać czy jest <, a nie przypisywać =). Zamiast wydziwiać:

for(char litera : linia)
{
    litera_ascii=static_cast<int>(litera);
    zaszyfrowaniezapis<<litera_ascii<<endl;
}

Przy czym ogółem ten kod nadaje się tylko do zaorania i napisania od nowa.

Nie używaj zmiennych globalnych. Poznaj tablice.

0
  1. tak słyszałem o tablicach ale na chwile obecną chciałbym miec te 20 zmiennych gdyz tak jest czytelniej dla mnie (moze jestem dziwny), (docelowo zamienię to na tablice)
  2. tam mój błąd (<=)
  3. wynikiem algorytmu który podałeś sa same 0 :/
  4. czemu nie uzywac zmiennych globalnych??
0

screenshot-20190115202002.png

0

Powinno działać :P

#include <string>
#include <fstream>
#include <algorithm>
#include <iterator>

using namespace std;

void encode(istream& input, ostream& output)
{
    copy(istreambuf_iterator<char>{input}, istreambuf_iterator<char>{}, ostream_iterator<int>{output, "\n"});
}

void decode(istream& input, ostream& output)
{
    transform(istream_iterator<string>{input}, istream_iterator<string>{}, ostream_iterator<char>{output}, 
                  [](const string& encoded) { return static_cast<char>(stoi(encoded));
    });
}

int main(int argc, char* argv[])
{
    {
        ifstream plain{ "plain.txt" };
        ofstream encoded{ "encoded.txt" };

        encode(plain, encoded);
    }

    {
        ifstream encoded{ "encoded.txt" };
        ofstream decoded{ "decoded.txt" };

        decode(encoded, decoded);
    }

    return 0;
}
0

dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0