C++ char & mehrere Zeichen



  • Die Aufgabe ist mit switch aber nicht, bzw nur sehr umständlich lösbar. Dein Lehrer ist doof.



  • Wem sagst Du das...

    Nunja, wir durften die Einheiten selber wählen, vielleicht habe ich mir auch selber ein Ei gelegt mit den millisekunden.. 😕

    Aufgabe lautet:

    Entwickeln Sie ein C++-Programm, das das Umrechnen von Einheiten ermöglicht:
    - Der Benutzer soll einen Wert eingeben mit einer Ausgangseinheit.
    - Es werden Zieleinheiten angegeben und nach Auswahl entsprechend umgerechnet.
    - Mindestens 6 Einheiten
    - Struktogramm
    - Abgabetermin: Nach den Herbstferien

    Nach Möglichkeit Switch/Case verwenden..

    NACH MÖGLICHKEIT, sehe ich ja jetzt erst O_o

    ABER: Selbst wenn ich es mit If mache, dann kann ich doch trotzdem nur 1 Buchstaben in char speichern? 😕



  • Deshalb der std::string. std::string ist eine Klasse, die dir C++ bereitstellt. Mit std::string kann man Zeichenketten erstellen/bearbeiten/usw.



  • Und wie genau benutze ich das?

    Wozu steht das std::string?

    Ich muss meinem Lehrer halt erklären können was genau ich da benutzt habe.. Und mir komplett jetzt strings anzulernen ist meiner meinung nach etwas zu ausschweifend, oder?



  • std::strings sind ganz einfach zu verwenden:

    cout << "Geben Sie eine Einheit ein!\n";
    string einheit;
    cin >> einheit;
    
    if(einheit == "ms")
        ...
    
    else if(einheit == "kJ")
        ...
    
    else if(einheit == "km/h")
        ...
    
    else
        cout << "Unbekannte Einheit!\n";
    

    Und schreib statt endl in den String ein \n rein. endl gibt nicht nur \n aus, sondern flusht auch noch den Stream. Du willst nur ein \n, also schreib auch \n hin 😉



  • Du kannst aber entweder ein einstelliges Kürzel für Millisekunden festlegen, oder aber die Einheiten als Zahlen 'verschlüsseln' und int - Werte einlesen, wo dann zB 1 für Millisekunden, 2 für Meter, 3 für Tage usw. steht. Und mit den Int- Werten kannst Du auch wieder switch-case machen.

    Du kannst auch den Benutzer strings eingeben lassen, die Du dann im Programm selbst auf eine Tabelle mit int - Werten abbildest, mit deren Hilfe Du wiederum switch - case ausführen kannst.

    Also im Programm festlegen:
    1 = "ms"
    2 = "Meter" (oder einfach "m")
    3 = "Kilo" (oder "kg")

    usw.

    der Benutzer gibt nun "kg" oder sowas ein, Du holst Dir daraufhin den Wert 3 (für ("kg") aus Deiner Tabelle und switchst entsprechend ...

    Ist etwas aufwendiger, kA, ob das was für Dich sein kann.



  • 314159265358979 schrieb:

    std::strings sind ganz einfach zu verwenden:

    cout << "Geben Sie eine Einheit ein!\n";
    string einheit;
    cin >> einheit;
    
    if(einheit == "ms")
        ...
    
    else if(einheit == "kJ")
        ...
    
    else if(einheit == "km/h")
        ...
    
    else
        cout << "Unbekannte Einheit!\n";
    

    Und schreib statt endl in den String ein \n rein. endl gibt nicht nur \n aus, sondern flusht auch noch den Stream. Du willst nur ein \n, also schreib auch \n hin 😉

    Muss ich dieses "std::string" schreiben oder geht auch einfach nur "string" so wie Du es gemacht hast?

    Und Danke für die Hilfe! 🙂
    Und kann ich den String dann theoretisch auch im switch case auslesen oder nur im if/else?



  • Da du oben ein using namespace std; hast, reicht string. Nein, mit switch kann man nur integrale Typen verwenden, also keinen string.



  • *auf die Knie geh und verbeug*

    Dankeschön für Eure wirklich sehr schnelle Hilfe! Ich hoffe ich werde sie nicht nochmal beanspruchen müssen, aber die Homepage ist trotzdem direkt als Favorit gespeichert! 🙂



  • Streng genommen solltest du auch noch ein

    #include <string>
    

    an den Anfang deiner Datei schreiben. Es kann sein, dass der iostream-Header den String-Header einbindet, aber das muss nicht der Fall sein. Deshalb immer die Header einbinden, die du brauchst. 😉



  • PS.: heißt ich kann das so schreiben?

    string Ausgangseinheit;
        string Zieleinheit;
        char Beenden;
        double Ausgangszahl;
        double Ergebnis;
        [...]
        if(Ausgangseinheit == "ms")
          {
           }
    

    Und das ms dann in " " und nicht in ' ' wie bei char? 🙂



  • Genau. Ein char-Literal wird in '' geschrieben, ein String-Literal in "".



  • 314159265358979 schrieb:

    std::strings sind ganz einfach zu verwenden:

    cout << "Geben Sie eine Einheit ein!\n";
    string einheit;
    cin >> einheit;
    
    if(einheit == "ms")
        ...
    
    else if(einheit == "kJ")
        ...
    
    else if(einheit == "km/h")
        ...
    
    else
        cout << "Unbekannte Einheit!\n";
    

    Und schreib statt endl in den String ein \n rein. endl gibt nicht nur \n aus, sondern flusht auch noch den Stream. Du willst nur ein \n, also schreib auch \n hin 😉

    Du weißt aber schon, dass man vorzugsweise compare() nehmen sollte.


  • Mod

    Hinweiser schrieb:

    Du weißt aber schon, dass man vorzugsweise compare() nehmen sollte.

    Begründe das doch mal, wenn du solche Behauptungen aufstellst. Und die Begründung sollte besser gut sein.



  • Mein Fehler - war wohl noch bei C-Strings.


Anmelden zum Antworten