Klasse String



  • ich möchte ein Instanz der Klasse String auf Intergerinhalt überprüfen und dann an eine Integervariable übergeben. Kann jemdan helfen?

    MfG
    acelab


  • Mod

    Einen std::stringstream mit dem String initialisieren, dann aus dem stringstream in den integer lesen. War das lesen erfolgreich, dann war wohl ein Integer drin. Siehe auch:
    FAQ: einmal Zahl und zurück

    Die wahr Frage ist, warum du einen String mit einer Zahl drin hast. Sehr oft ist das nämlich ein typischer Anfängerfehler, wenn sie Dateien/Eingaben parsen, erst einmal alles aus einem Stream in einen String zu lesen, den String dann in einen Stream zu packen und dann zu zerlegen, anstatt gleich aus dem Stream heraus alles richtig zu zerlegen.



  • int main(int argc, const char * argv[])
    {
        string name;
        string ort;
        string alter;
        cout << "Gebe Deinen Namen ein: ";
        getline(cin, name);
        cout << "Gebe Deinen Wohnort ein: ";
        getline(cin, ort);
        cout << "Gebe Dein Alter ein: ";
        getline (cin, alter);
    
        cout << "Dein Name lautet " << name << endl;
        cout << "Du wohnst in " << ort << endl;
        cout << "Du bist " << alter << " Jahre alt!";
    
        return 0;
    }
    

    Wie könnte ich denn das Alter in eine Integervariable am besten von der Konsole lesen?

    MfG



  • ...
    int alter;

    ...

    cin >> alter;

    ...



  • Wie sieht es mit der Verwendung von short int aus, da das Alter nicht
    größer als 32767 sein dürfte.
    Negative Zahlen könnte man ja auch gleich mit ausschließen durch unsigned.
    Also z.B.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        unsigned short int alter;     
        cin >> alter;
        cout << alter;
    }
    

  • Mod

    redrew99 schrieb:

    Wie sieht es mit der Verwendung von short int aus, da das Alter nicht
    größer als 32767 sein dürfte.

    Welchen nennenswerten Vorteil hätte das?

    Negative Zahlen könnte man ja auch gleich mit ausschließen durch unsigned.

    Jetzt gib mal -1 ein und staune.



  • SeppJ schrieb:

    Welchen nennenswerten Vorteil hätte das?

    Bei diesem kleinen Programm vermutlich nichts, aber falls Speicher in zukünftigen Programmen mal knapp sein sollte...

    SeppJ schrieb:

    Jetzt gib mal -1 ein und staune.

    Interessant, es wird der maximale Wertebereich ausgegeben bzw. bei zweistelligen negativen Zahlen wird (Alter-2) vom maximalen Wertebereich abgezogen.



  • SeppJ schrieb:

    redrew99 schrieb:

    Negative Zahlen könnte man ja auch gleich mit ausschließen durch unsigned.

    Jetzt gib mal -1 ein und staune.

    Wenn da z.B. stände: "Geben sie ihr Alter an." und jemand gibt -1 ein, dann ist das doch der Fehler des Anwenders und nicht der Fehler des Entwicklers. Also würde ich auch zu unsigned tendieren, oder etwa nicht?


  • Mod

    Gugelmoser schrieb:

    SeppJ schrieb:

    redrew99 schrieb:

    Negative Zahlen könnte man ja auch gleich mit ausschließen durch unsigned.

    Jetzt gib mal -1 ein und staune.

    Wenn da z.B. stände: "Geben sie ihr Alter an." und jemand gibt -1 ein, dann ist das doch der Fehler des Anwenders und nicht der Fehler des Entwicklers. Also würde ich auch zu unsigned tendieren, oder etwa nicht?

    Aber wie stellst du dann fest, dass die Eingabe falsch war?

    (Ja, beim Alter kann man sich denken, dass niemand über 4 Milliarden Jahre alt ist. Aber das kann ein Problem werden, wenn der ganze Wertebereich eines unsigned realistisch für den gefragten Wert ist)



  • Jetzt argumentiere ich, dass noch kein Mensch

    redrew99 schrieb:

    Interessant, es wird der maximale Wertebereich ausgegeben bzw. bei zweistelligen negativen Zahlen wird (Alter-2) vom maximalen Wertebereich abgezogen.

    Google mal Zweierkomplement (Raumfolgearithmetik).
    @SeppJ: Kein Schwein wird älter als 150. setz das als Bedingung, und das Problem ist gelöst 🤡


  • Mod

    Hacker schrieb:

    Raumfolgearithmetik

    Den Begriff sehe ich zum ersten mal. Und scheint eine gruselige Übersetzung auf ähnlichem Niveau wie "Seiteneffkt" zu sein.

    Nur aus Neugierde - wer kann damit (ohne zu googlen) etwas anfangen?



  • camper schrieb:

    Nur aus Neugierde - wer kann damit (ohne zu googlen) etwas anfangen?

    Damit kann ich nicht mal mit Google was anfangen. 😃 (Na ok, wenn man etwas liest dann schon.)



  • cooky451 schrieb:

    camper schrieb:

    Nur aus Neugierde - wer kann damit (ohne zu googlen) etwas anfangen?

    Damit kann ich nicht mal mit Google was anfangen. 😃 (Na ok, wenn man etwas liest dann schon.)

    Vielleicht könnt ihr Google-Spastis dann was mit der englischen Variante anfangen: Sequence Space Arithmetics. Gibt gute Gründe wieso das so heißt.



  • Hacker schrieb:

    Google mal Zweierkomplement (Raumfolgearithmetik).

    cooky451 schrieb:

    Damit kann ich nicht mal mit Google was anfangen. 😃

    Hacker schrieb:

    ihr Google-Spastis

    Google mal nach "Eigentor" - metaphorisch gesehn.



  • Hacker schrieb:

    @SeppJ: Kein Schwein wird älter als 150. setz das als Bedingung, und das Problem ist gelöst 🤡

    einige Schildkröten schon... 😉

    redrew99 schrieb:

    SeppJ schrieb:

    Welchen nennenswerten Vorteil hätte das?

    Bei diesem kleinen Programm vermutlich nichts, aber falls Speicher in zukünftigen Programmen mal knapp sein sollte...

    klingt für mich sehr nach premature optimization.



  • pumuckl schrieb:

    Hacker schrieb:

    Google mal Zweierkomplement (Raumfolgearithmetik).

    cooky451 schrieb:

    Damit kann ich nicht mal mit Google was anfangen. 😃

    Hacker schrieb:

    ihr Google-Spastis

    Google mal nach "Eigentor" - metaphorisch gesehn.

    Nix gefunden 😞

    Ich wusste ja nicht, das Google bei sowas so spärlich ist. Aber man kann doch ein WENIG EIGENINITIATIVE zeigen und sich ein Fachbuch schnappen, anstatt gleich aufzugeben. Und "nicht mal" zeigt schon genug.

    @daddy_felix: Setz bitte einen Smilie dahinter, sonst denkt man noch du meinst das Ernst (also dass man Schildkröten berücksichtigen sollte).



  • SeppJ schrieb:

    Gugelmoser schrieb:

    Wenn da z.B. stände: "Geben sie ihr Alter an." und jemand gibt -1 ein, dann ist das doch der Fehler des Anwenders und nicht der Fehler des Entwicklers. Also würde ich auch zu unsigned tendieren, oder etwa nicht?

    Aber wie stellst du dann fest, dass die Eingabe falsch war?)

    if( alter>120 )
    {
        // Falsche Eingabe
    }
    

    Oder meinst du nicht? Ok, wenn jemand einen so negativen Wert eingibt, dass er wieder im gültigen Bereich landet, obwohl es eine ungültige Eingabe war, dann ist int wirklich besser.


Log in to reply