Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 17:39

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Caesar-Verschlüsslung?

Discussion on Caesar-Verschlüsslung? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2013
Posts: 2
Received Thanks: 0
Caesar-Verschlüsslung?

Hey ich habe mich an die Caesar-Verschlüsslung gesetzt und komm nicht weiter...
Das Problem ist das der keine Sätze verschlüsselt warum auch immer..
Da ich neu in C++ bin freu ich mich über Tipps aandd Tricks

Code:
#include <iostream>
#include <string>
using namespace std;

string crypt(string text,int chiffre) {
    for(unsigned int i = 0; i < text.length(); i++) {
        text[i] = text[i] + chiffre;
    }
    return text;
}

string decrypt(string text,int chiffre) {
    for(unsigned int i = 0; i < text.length(); i--) {
        text[i] = text[i] - chiffre;
    }
    return text;
}

int main()
{
    string textc = "";
    string textd = "";
    char input = '0';
    int chiffre = 0;
    bool exit = false;

    do{
        cout << "Caesar-Chiffre" << endl << endl;
        cout << "<1> Crypt" << endl;
        cout << "<2> Decrypt" << endl;
        cout << "<3> Exit" << endl;
        cout << endl << "Input : ";
        cin >> input;

        switch(input) {
            case '1' : cout << endl << "Text : ";
                       cin >> textc;
                       fflush(stdin);
                       cout << endl << "Chiffre : ";
                       cin >> chiffre;
                       fflush(stdin);
                       cout << endl << endl << crypt(textc,chiffre) << endl;
                       fflush(stdin);
                       getchar();
                       break;
            case '2' : cout << endl << "Text : ";
                       cin >> textd;
                       cout << endl << "Chiffre : ";
                       cin >> chiffre;
                       cout << endl << endl << decrypt(textd,chiffre) << endl;
                       fflush(stdin);
                       getchar();
                       break;
            case '3' : exit = true;
                       break;
           default : cout << endl << "Fuck off choose a option from the list!" << endl << endl;
                     break;
                     }
        }while(exit == false);

    return 0;
}

Danke im vorraus
CashOrSmash is offline  
Old 04/30/2013, 23:46   #2
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Das liegt daran, dass operator>> von std::cin bis zum Leerzeichen einliest.
Ausserdem zum Code:

1. Benutz beim Parameter const std::string& statt std::string.
2. Benutz am besten direkt std::transform aus dem header 'algorithm'
3. Gewöhn dir das globale 'using namespace std;' ab
4. Prüfe generell beim Einlesen via std::cin:perator>> auf Erfolg
Code:
if(std::cin >> var) { // continue... }
5. Lass das 'fflush(stdin);' weg (ruft laut Standard undefiniertes Verhalten hervor)
6. statt 'exit == false' einfach '!exit'

Das ist mir auf den ersten Blick aufgefallen.





Gruß
Schlüsselbein is offline  
Thanks
2 Users
Old 04/30/2013, 23:59   #3
 
elite*gold: 0
Join Date: Apr 2013
Posts: 2
Received Thanks: 0
Ok Danke Falls ihr noch was findet schreibt es bitte !
CashOrSmash is offline  
Old 05/01/2013, 00:45   #4
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Schlüsselbein View Post
Das liegt daran, dass operator>> von std::cin bis zum Leerzeichen einliest.
Ausserdem zum Code:

1. Benutz beim Parameter const std::string& statt std::string.
2. Benutz am besten direkt std::transform aus dem header 'algorithm'
3. Gewöhn dir das globale 'using namespace std;' ab
4. Prüfe generell beim Einlesen via std::cin:perator>> auf Erfolg
Code:
if(std::cin >> var) { // continue... }
5. Lass das 'fflush(stdin);' weg (ruft laut Standard undefiniertes Verhalten hervor)
6. statt 'exit == false' einfach '!exit'

Das ist mir auf den ersten Blick aufgefallen.





Gruß
Punkt 1 ist nicht notwendig, bzw. klappt mit dem Implementationsprinzip so gar nicht, es wird immer auf eine Kopie hinauslaufen, von daher ists einfach Wurscht. Das mit std::transform ist natürlich grundsätzlich schon auch eine gute Lösung:

Code:
std::string encrypt(const std::string &str, char chiffre) {
    std::string result;
    std::transform(str.begin(), str.end(),
        std::back_inserter(result), [&] (char c) {
        return (c + chiffre) & 0xFF;
    });
    return result;
}
Master674b is offline  
Old 05/01/2013, 00:59   #5

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
^Ich habe auch erst gedacht, dass er mit der const Reference den Parameter meint, aber der Rückgabewert erscheint mir logischer.

@TE: "endl << endl" - ich nehme an, du willst damit eine neue Zeile erzeugen? endl leert gleichzeitig auch den Buffer, braucht also wohl ein bisschen mehr Performance. Ich würde da einfach << "\n\n" << text nehmen, das ist die Escape-Sequenz für newline.

Und Schlüsselbein rät normalerweise ganz gerne von getchar ab, da man möglichst C und C++ nicht blind vermischen sollte. std::cin.get() sollte da auch funktionieren.

Wenn du Sätze einlesen willst: std::getline(std::cin, DEINSTRING);, ich weiß gerade nicht, welchen Rückgabewert das gibt, aber gefühlt bekommst du wie bei std::cin einen Return-Wert, der nicht 0 sein sollte, wenn alles gut ist.
snow is offline  
Old 05/01/2013, 01:02   #6
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by snow911 View Post
^Ich habe auch erst gedacht, dass er mit der const Reference den Parameter meint, aber der Rückgabewert erscheint mir logischer.

@TE: "endl << endl" - ich nehme an, du willst damit eine neue Zeile erzeugen? endl leert gleichzeitig auch den Buffer, braucht also wohl ein bisschen mehr Performance. Ich würde da einfach << "\n\n" << text nehmen, das ist die Escape-Sequenz für newline.

Und Schlüsselbein rät normalerweise ganz gerne von getchar ab, da man möglichst C und C++ nicht blind vermischen sollte. std::cin.get() sollte da auch funktionieren.

Wenn du Sätze einlesen willst: std::getline(std::cin, DEINSTRING);, ich weiß gerade nicht, welchen Rückgabewert das gibt, aber gefühlt bekommst du wie bei std::cin einen Return-Wert, der nicht 0 sein sollte, wenn alles gut ist.
Benutze da meistens einfach std::cin.sync nach einer Input operation, dann funktioniert der Stream wieder (clear nicht vergessen für die error flags!)
Master674b is offline  
Old 05/01/2013, 08:26   #7

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Quote:
1. Benutz beim Parameter const std::string& statt std::string.
Ist wohl veraltet und sofern du einen string übergibst, der nicht const ist, wird, afaik auch eine temporäre Kopie erstellt. Habe im C++ Forum mal irgendwas darüber gelesen. Da gibts wohl eine bessere Alternative mit std::move, finde den Thread grade nicht mehr.
Delinquenz is offline  
Old 05/01/2013, 08:48   #8
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Quote:
Ich habe auch erst gedacht, dass er mit der const Reference den Parameter meint, aber der Rückgabewert erscheint mir logischer.
Nein, ich habe schon den Parameter gemeint. Ihr habt aber recht, das ist in dem Fall eigentlich egal.
Deshalb würde ich hier wie schon gesagt direkt std::transform benutzen oder etwas im Stile von:
Code:
template <class InputIt, class OutputIt>
OutputIt encrypt(InputIt beg, InputIt end, OutputIt result, int chiffre);
basteln. Damit spart man sich nicht nur kopiererei, sondern kann auch die Funktion auf jeden Container anwenden.
Schlüsselbein is offline  
Old 05/01/2013, 13:05   #9
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Delinquenz View Post
Ist wohl veraltet und sofern du einen string übergibst, der nicht const ist, wird, afaik auch eine temporäre Kopie erstellt. Habe im C++ Forum mal irgendwas darüber gelesen. Da gibts wohl eine bessere Alternative mit std::move, finde den Thread grade nicht mehr.
Jo std::move verschiebt quasi den inhalt und hinterlässt ein leeres aber valides objekt.

Passt z.B. hier, also bei sowas sollte man dann by value übergeben:

Code:
void storeMe(object o) {
   m_container.push_back(std::move(o)); // in den container moven
}

// object braucht natürlich move semantics damit das klappt!

object o;
storeMe(o); // copy ctor...

storeMe(std::move(o)); // move ctor...
// o ist nun "leer", bei nem string halt einfach kein inhalt mehr da, kann aber weiter verwendet werden

storeMe(object()); // move ctor weil temporary
Damit hast dann 0 kopien

Btw: Bei Rückgaben niemals mit std::move zurückgeben, das macht der Compiler automatisch, ihr stört damit nur NRVO. Die heutigen Compiler moven sowieso wo es nur geht ^^
Master674b is offline  
Reply


Similar Threads Similar Threads
[REQUEST] Caesar Casino
03/09/2013 - Facebook - 0 Replies
Anyone have some cheats for Caesar casino ?
Caesar-Verschlüsslung Frage?!
03/08/2012 - C/C++ - 3 Replies
Hey Epvp Ich lerne grad C++ und bin grad bei den Strings im Buch kam ein Bespiel zur Caesar-Verschlüsslung und habe ein Frage zu einer Stelle im Code. Der Code : #include <iostream> #include <string> using namespace std;
[H] PSC Checker Verschlüsslung
10/07/2011 - Technical Support - 3 Replies
Ich habe den PSC Checker von iNk benutzt jedoch wurde die Version deaktiviert. Die Paysafecards sind in einer .bin verschlüsselt und komme jetzt nicht dran. kann mir jemand helfen? Thread: http://www.elitepvpers.com/forum/epvp-coders-relea ses/1342527-release-paysafecard-manager-ink-2.html Der typ schreibt auch nicht back -.-' need help :(
Verschlüsslung ändern?
03/17/2011 - Metin2 Private Server - 6 Replies
Guten Abend =) Ich hätt da mal wieder ne frage:D Ist jetzt ziemlich doof aber naja, hab mich damit auch noch nicht wirklich beschäftigt. Wie änder ich die verschlüsslung im file-achiver von Tim? In seinem Theard hat er zwar geschrieben das die RootExtract.xml" und "RootPack.xml" ein beispiel code enthalten, allerdings konnte ich darin nichts finden. Ich habe bereits die sufu genutzt und etwa 1.5 stunden im Theard nachgelesen ob da nicht i-was stehen könnte. Entweder bin ich...
Verschlüsslung? nur wie
01/26/2011 - Metin2 Private Server - 11 Replies
Hallo hab da mal eine frage wie kann ich meinen Client verschlüsslen das niemand mehr denn endpacken kann? will auch nicht denn verschlüssler denn Puplic ist ambesten das ich es auch nimmer endpacken kann ist das einfachste weiß das jemand wie? Hoffe ihr könnt mir hilfen! mfg holzi



All times are GMT +1. The time now is 17:40.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.