#include #include #include using namespace std; void Intro() { cout << "---------------------------------------------------" << endl << "| University of Leiden |" << endl << "| Programmeermethoden opdracht 2 |" << endl << "| |" << endl << "| Gemaakt door: |" << endl << "| Rick van der Zwet |" << endl << "| Pascal de Vos |" << endl << "| |" << endl << "| |" << endl << "| Getest op: Unix systeem (Sun OS) |" << endl << "| Windows XP (Dev-C++ 4.9.9.0) |" << endl << "| Freebsd 5.2.1-r11 gcc version 3.3.3 |" << endl << "---------------------------------------------------" << endl << endl; } //Laat de statistieken op het scherm zien void Statistiek(double TotaalCodeTekens, double TotaalGewoneTekens, double TotaalGewisteTekens, int RegelNummers, int LangsteRegelNummer, int LangsteRegelAantalTekens) { cout << "Aantal gecopierde tekens : " << TotaalGewoneTekens << endl << "Aantal gecodeerde tekens : " << TotaalCodeTekens << endl << "Aantal gewiste tekens : " << TotaalGewisteTekens << endl << "Aantal Regels : " << RegelNummers < LangsteRegelAantalTekens) { LangsteRegelAantalTekens = AantalTekens; LangsteRegelNummer = RegelNummer; } AantalTekens = 0; } if (ch == 47) //char is een slash { SlashAantal++; if (SlashAantal == 2) //als er 2 slashjes achter elkaar staan { Loop = true; TotaalGewisteTekens += 2; while(Loop == true) // ga net zolang char's uitlezen tot je aan het eind van de regel bent { TotaalGewisteTekens++; Invoer.get(ch); if (ch == 13) { Uitvoer.put(ch); Invoer.get(ch); //aanname LF na CR (Windows) } if (ch == 10) { Uitvoer.put(ch); Loop = false; RegelNummer++; TotaalCodeTekens += AantalTekens; if (AantalTekens > LangsteRegelAantalTekens) { LangsteRegelAantalTekens = AantalTekens; LangsteRegelNummer = RegelNummer; } AantalTekens = 0; } } SlashAantal = 0; } } else //char is geen slash { if (SlashAantal == 1) // er is maar een slash gevonden. Zorg er voor dat die toegevoegd aan de file wordt { Uitvoer.put(passwd[LetterPositie] - 'a' + '/'); if (LetterPositie < StringLengte) { LetterPositie++; } else { LetterPositie = 0; } SlashAantal = 0; } if (( ch <= '~' ) && ( ch >= ' ')) { int EncodedChar = int(passwd[LetterPositie] - 'a' + ch); if (EncodedChar > 126 ) { EncodedChar = EncodedChar - 95; } Uitvoer.put(EncodedChar); if (LetterPositie < StringLengte) { LetterPositie++; } else { LetterPositie = 0; } } else { Uitvoer.put(ch); } } } else //File is klaar { Invoer.close(); Uitvoer.close(); if (Statistieken) { Statistiek(TotaalCodeTekens, TotaalGewoneTekens, TotaalGewisteTekens, RegelNummer, LangsteRegelNummer, LangsteRegelAantalTekens); } return(0); } } } else if (SoortCrypt == 2) { while (RegelNummer <= RegelEind) // zolang gewenste regel nog niet is bereikt { if (Invoer.get(ch)) { AantalTekens++; if ( ch == 10) { RegelNummer++; TotaalCodeTekens += AantalTekens; if (AantalTekens > LangsteRegelAantalTekens) { LangsteRegelAantalTekens = AantalTekens; LangsteRegelNummer = RegelNummer; } AantalTekens = 0; } if (( ch <= '~' ) && ( ch >= ' ')) { DecodedChar = int( ch - (passwd[LetterPositie] - 'a')); if (LetterPositie < StringLengte) { LetterPositie++; } else { LetterPositie = 0; } if (DecodedChar < 32 ) { DecodedChar = DecodedChar + 95; } cout << ch << " wordt " << DecodedChar << " wat is " << char(DecodedChar) << endl; Uitvoer.put(DecodedChar); } else { Uitvoer.put(ch); } } else { Invoer.close(); Uitvoer.close(); if (Statistieken) { Statistiek(TotaalCodeTekens, TotaalGewoneTekens, TotaalGewisteTekens, RegelNummer, LangsteRegelNummer, LangsteRegelAantalTekens); } return(0); } } } while (Invoer.get(ch)) // Laatste deel wegschrijven { TotaalGewoneTekens++; if (ch == 10) { RegelNummer++; } Uitvoer.put(ch); } Invoer.close(); Uitvoer.close(); if (Statistieken) { Statistiek(TotaalGewoneTekens, TotaalCodeTekens, TotaalGewisteTekens, RegelNummer, LangsteRegelNummer, LangsteRegelAantalTekens); } return(0); } //end Crypt //INVOER: Bestandnaam, woord te controleren, Of het woord vrij moet staan of niet. //UITVOER: Aantal keer dat het voorkomt. int WoordZoeken(string FileName, string Woord) { int AantalKeerWoord = 0; int LetterPositie = 0; char ch = ' '; bool GeldigeChar = true; //Als deze true is dan is er een geldig teken dat voor een woord mag staan const int WoordLengte = Woord.length(); //deze blijft altijd identiek dus geen variable ifstream Invoer(FileName.c_str(),ios::in); while (Invoer.get(ch)) //zolang file invoer heeft { if (LetterPositie == WoordLengte) //controleer of er een match is. { if ((ch < 'A') || ((ch > 'Z') && (ch <'a')) || ch > 'z') //er geen [a-z,A-Z] achter staat. { AantalKeerWoord++; } LetterPositie = 0; } if ((ch == char(Woord[LetterPositie])) && GeldigeChar) //kijk of een character overeen komt met de gezochte in het woord { LetterPositie++; } else if (((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'))) //anders teller resetten { LetterPositie = 0; GeldigeChar = false; } else { GeldigeChar = true; } } Invoer.close(); return(AantalKeerWoord); } //end WordCheck int main() { char GekozenOptie = ' '; string FileName = ""; int BeginRegel = 0; int EindRegel = 0; string FileNameOutput = ""; string Passwd = ""; string ZoekWoord = ""; // Menu opties: (1) Encoderen // (2) Decoderen // (1) --> FileName invoeren --> encodeer sleutel invoeren // (2) --> FileName invoeren --> decodeer sleutel invoeren Intro(); cout << "Kies uit de volgende opties:" << endl << "Encodeer een file (1)" << endl << "Decodeer een file (2)" << endl << "Beeindig het programma (q)" << endl << endl; cout << "Keuze: "; cin >> GekozenOptie; if ((GekozenOptie != '1') && (GekozenOptie != '2')) { cout << "\nGoodbye\n"; return(0); } cout << endl << "Voer Invoer Bestandsnaam in: "; cin >> FileName; cout << endl << "Voer beginregel in: "; cin >> BeginRegel; cout << endl << "Voer eindregel in: "; cin >> EindRegel; cout << endl << "Voer Uitvoer Bestandsnaam in: "; cin >> FileNameOutput; cout << endl << "Voer uw wachtwoord in: "; cin >> Passwd; cout << endl << "Voor uw zoekwoord in (if) : "; //oftewel 'if teller' cin >> ZoekWoord; //Het woord moet geteld worden voordat er geencodeerd wordt, bij decoderen moet het na het decoderen gebeuren if (GekozenOptie == '1') //door naar encoderen, filenamevrag in encoderen verwerken { Crypt(1, FileName, FileNameOutput, Passwd, "true", BeginRegel, EindRegel); cout << "Het woord '" << ZoekWoord << "' komt "<< WoordZoeken(FileName, ZoekWoord) << " keer voor in "<< FileName << endl; } else { Crypt(2, FileName, FileNameOutput, Passwd, "true", BeginRegel, EindRegel); cout << "Het woord '" << ZoekWoord << "' komt "<< WoordZoeken(FileNameOutput, ZoekWoord) << " keer voor in " << FileNameOutput << endl; } //windows hack cin.clear(); cin.ignore(30, '\n'); return(0); }