Avatar billede polle_vendsyssel Nybegynder
09. juni 2007 - 10:58 Der er 8 kommentarer og
1 løsning

Hjælp til forklaring

Hejsa eksperten

Er der nogen der gider sætte nogle forklaringer ind til denne kode?

#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>


using namespace std;

char ae=-111, oe=-101, aa=134;

string Crypt(const string& aIn)
{
  static const char Arr1[] = "klmnopqrstuvwxyzabcdefghij";
  static const char Arr2[] = "KLMNOPQRSTUVWXYZABCDEFGHIJ";
  int idx;
  string Out;
  for(idx = 0; idx < aIn.size(); idx++)
  {
      int ii = aIn[idx] - 'a';
      int jj = aIn[idx] - 'A';
      if(aIn[idx] >= 'a' && aIn[idx] <= 'z')
        Out += Arr1[ii];
      else if(aIn[idx] >= 'A' && aIn[idx] <= 'Z')
        Out += Arr2[jj];
      else
        Out += aIn[idx];
  }
  return Out;
}
string Decrypt(const string& aIn)
{
  static const char Arr1[] = "qrstuvwxyzabcdefghijklmnop ";
  static const char Arr2[] = "QRSTUVWXYZABCDEFGHIJKLMNOP ";
  int idx;
  string Out;
  for(idx = 0; idx < aIn.size(); idx++)
  {
      int ii = aIn[idx] - 'a';
      int jj = aIn[idx] - 'A';
      if(aIn[idx] >= 'a' && aIn[idx] <= 'z')
        Out += Arr1[ii];
      else if(aIn[idx] >= 'A' && aIn[idx] <= 'Z')
        Out += Arr2[jj];
      else
        Out += aIn[idx];
  }
  return Out;
}

int main()
{
  string Line, dummy, Crypted, Decrypted;
  int x;
  cout << "hvad "<<oe<<"nsker du at g"<<oe<<"re:" << endl;
  cout << "1: Kryptere" << endl;
  cout << "2: Dekryptere" << endl;
  cout << "Valg: ";
  cin >> x;
  cout << "Skriv noget: ";
    cout.flush();
  getline (cin, dummy);
  getline(cin, Line);
  switch (x) {
  case 1:
        Crypted = Crypt(Line);       
        cout << "Krypteret: " << Crypted << endl;
        break;
  case 2:
        Decrypted = Decrypt(Line);
        cout << "Dekrypteret: " << Decrypted << endl;
        break;
  default:
        cout << "du skal v"<<ae<<"lge 1 eller 2." << endl;       
        main();
     
  }
  system("pause");
}

På forhånd tak
Avatar billede arne_v Ekspert
09. juni 2007 - 17:30 #1
Det ligner en meget vesværlig måde at kryptere/dekryptere ved
at forskyde alle engelske bogstaver 10 værdier (med individuel
wrap around for store og små bogstaver).
Avatar billede arne_v Ekspert
09. juni 2007 - 17:31 #2
abcABC krypteres til klmKLM
Avatar billede polle_vendsyssel Nybegynder
09. juni 2007 - 18:55 #3
Hejsa, mange tak :)

Jeg forstår dog udemærket funktionen af programkoden og ideen i det.. Mit problem ligger i at jeg ikke har den helt store forståelse for c++ - så mit ønske er, hvis du gider bruge fem minutter på det at du sætter "// forklaring" til dele af koden, gerne lidt uddybende. På forhånd tak.
Avatar billede arne_v Ekspert
09. juni 2007 - 19:16 #4
Der er ikke meget at sige om den kode.

string Crypt(const string& aIn)
{
  static const char Arr1[] = "klmnopqrstuvwxyzabcdefghij";
  static const char Arr2[] = "KLMNOPQRSTUVWXYZABCDEFGHIJ";
  int idx;
  string Out;
  for(idx = 0; idx < aIn.size(); idx++)
  {
      // beregn index for små bogstaver
      int ii = aIn[idx] - 'a';
      // beregn index for store bogstaver
      int jj = aIn[idx] - 'A';
      // hvis lille bogstav brug index ind i erstatning for små bogstaver
      if(aIn[idx] >= 'a' && aIn[idx] <= 'z')
        Out += Arr1[ii];
      // hvis stort bogstav brug index ind i erstatning for store bogstaver
      else if(aIn[idx] >= 'A' && aIn[idx] <= 'Z')
        Out += Arr2[jj];
      // hvis ikke bogstav bare behold tegnet
      else
        Out += aIn[idx];
  }
  return Out;
}
Avatar billede polle_vendsyssel Nybegynder
09. juni 2007 - 23:51 #5
Hej Arne, det er rigtig lækkert, hvis du gider kigge på resten af koden også ? altså hel fra top til bund.. Men det der ser godt ud..


Venligst
Avatar billede arne_v Ekspert
10. juni 2007 - 01:03 #6
Decrypt er jo helt lige sådan.
Avatar billede arne_v Ekspert
10. juni 2007 - 01:06 #7
int main()
{
  string Line, dummy, Crypted, Decrypted;
  int x;
  // udskriv menu
  cout << "hvad "<<oe<<"nsker du at g"<<oe<<"re:" << endl;
  cout << "1: Kryptere" << endl;
  cout << "2: Dekryptere" << endl;
  cout << "Valg: ";
  // indlæs valg
  cin >> x;
  // indlæs linie der skal krypteres/dekrypteres
  cout << "Skriv noget: ";
    cout.flush();
  getline (cin, dummy);
  getline(cin, Line);
  // udfør forskellig kode alt efter valg
  switch (x) {
  case 1:
        // krypter
        Crypted = Crypt(Line);     
        cout << "Krypteret: " << Crypted << endl;
        break;
  case 2:
        // dekrypter
        Decrypted = Decrypt(Line);
        cout << "Dekrypteret: " << Decrypted << endl;
        break;
  default:
        // forkert valg
        cout << "du skal v"<<ae<<"lge 1 eller 2." << endl;     
        main();
   
  }
  // vent med afslut indtil retur
  system("pause");
}
Avatar billede arne_v Ekspert
07. august 2007 - 22:39 #8
OK ?
Avatar billede polle_vendsyssel Nybegynder
09. august 2007 - 13:40 #9
Hej Arne, det må du sku undskylde, dit svar var rigtig ok, rigtig godt. Jeg fik en noget større forståelse for programmet, hvilket var vigtigt for mig.

Mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester