[ERLEDIGT]Char zu ASCII



  • char ist die englische Abkürzung für character. Du liest also nur ein einziges Zeichen ein. Des Weiteren musst du den char nicht nach int umwandeln, du kannst direkt mit chars rechnen.



  • Und wie kann ich dann mehrere Zeichen einlesen?



  • std::string. Du hast ja den erforderlichen Header schon eingebunden. 😉



  • Also so:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(){
    
        string Eingabe = 'a'; // Der zu Verschlüsselnde Text
        cout << "Zuverschlüsselnder Text: "<< endl;
        cin >> Eingabe;
    
        int ascii=(int)Eingabe;       //a wird in int gecastet
    
        system("PAUSE");            //Beliebige Taste zum schließen drücken.
        return(0);
    }
    

    Wie soll ich jetzt den string in ASCII konvertieren?

    int ascii =(int)Eingabe;
    

    funktioniert ja nun nichtmehr.



  • strings schreibt man in doppelte Anführungszeichen.

    @Problem: Du möchtest auf jedes Zeichen einen bestimmten Wert addieren. Dazu musst du nichts nach int umwandeln. Hier eine mögliche Lösung mittels Funktionsobjekt. (ungetestet)

    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    struct add_n
    {
        add_n(int n) : n(n) {}
    
        template <typename T>
        T operator () (T value) const
        {
            return value + n;
        }
    
    private:
        int const n;
    };
    
    int main()
    {
        cout << "Geben sie einen Text ein!\n";
        string input;
        getline(cin, input);
    
        cout << "Wie viel wollen Sie auf die Zeichen addieren?\n";
        int n;
        cin >> n;
    
        for_each(eingabe.begin(), eingabe.end(), add_n(n));
    
        cout << "Der verschlüsselte Text lautet \"" << input << "\"\n";
    }
    


  • Verstehe den Code nur nicht so ganz..

    for_each(eingabe.begin(), eingabe.end(), add_n(n));
    

    Woher nimmst du hier das eingabe ?? ist vorher im Code nie deklariert.



  • Flüchtigkeitsfehler. 🤡
    Sollte input heißen.



  • Mit input geht es dann auch.
    Nur das Problem ist beim Debugen gebe ich als Text "Hallo Welt" ein addiere 5 Zeichen und der verschlüsselte Text lautet "Hallo Welt". Irgendwas klappt da nicht so ganz.

    €: Selber Fehler auch mit anderen Zahlen beim addieren.



  • Ich sollte meinen Code in Zukunft besser testen. Ich habe an transform gedacht, aber das Funktionsobjekt für for_each verwendet. Man ändere

    template <typename T>
    T operator () (T value) const
    {
        return value + n;
    }
    

    in

    template <typename T>
    void operator () (T& value) const
    {
        value += n;
    }
    

    dann sollte es funktionieren.



  • Ja so klappt es, wie kann ich diesen Text wieder entschlüsseln um zu sehen ob es wirklich geklappt hat?



  • So hab mir den Code zum Verschlüsseln selber zusammen gebastelt:

    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    struct sub_n
    {
        sub_n(int n) : n(n) {}
    
        template <typename T>
        void operator () (T& value) const
        {
    		value -= n;
        }
    
    private:
        int const n;
    };
    
    int main()
    {
        cout << "Geben sie einen Text ein!\n";
        string input;
        getline(cin, input);
    
        cout << "Wie viel wollen Sie auf die Zeichen subtrahieren?\n";
        int n;
        cin >> n;
    
        for_each(input.begin(), input.end(), sub_n(n));
    
        cout << "Der verschluesselte Text lautet \"" << input << "\"\n";
    
    	system ("PAUSE");
    
    }
    

    Klappt auch perfekt. Vielen dank an 314159265358979 für deine Hilfe.



  • Tipp: sub_n mit einer Zahl n erzeugen, ist dasselbe, wie add_n mit -n zu erzeugen. 🤡


Anmelden zum Antworten