C++ devc++



  • Ich hab das leider nicht so ganz verstanden. Kannst du mir nicht ein wenig genauer erklären was in meinem Code fehlt?



  • string x = 8000000;   // Deins falsch
    string x = "Writing"; // Korrektes Beispiel
    

    Come on, you can do it 👍



  • Wieso nimmst du statt einen Zahlenwert ein Wort?



  • Weil string nur für Zeichenketten gedacht ist, da kann keine Zahl rein, außer du konvertierst die halt entsprechend.



  • Weil dein Datentyp ein String, also eine Zeichenkette ist. C++ erkennt sie als solche nur mittels "". Was du geschrieben hast, ist kein String, sondern int. Dass man dir den Unterschied zwischen elementaren Datentypen erklären muss, legt die Vermutung nahe, dass du in der Vorlesung nichts gelernt hast und jetzt die Aufgabe aufn letzten Drücker machst bzw. schon fast machen lässt. Mensch, du musst doch irgendwas von deinem Dozenten haben (Skript, Folien, Bücher, ......), wo solche grundlegende Sachen drin stehen - ich verstehe das Ganze nicht.



  • programmer21 schrieb:

    Wieso nimmst du statt einen Zahlenwert ein Wort?

    Wikipedia schrieb:

    Eine Zeichenkette oder (aus dem Englischen) ein String ist in der Informatik eine Folge von Zeichen (z. B. Buchstaben, Ziffern, Sonderzeichen und Steuerzeichen) aus einem definierten Zeichensatz.
    Zeichen können sich in einer Zeichenkette wiederholen, die Reihenfolge der Zeichen ist definiert. Zeichenketten sind somit Sequenzen aus Symbolen mit endlicher Länge.
    In der Programmierung ist eine Zeichenkette ein Datentyp, der eine Kette von Zeichen mit fester oder variabler Länge enthält. Damit werden hauptsächlich Wörter, Sätze und ganze Texte gespeichert.



  • programmer21 schrieb:

    Keine Ahnung warum das falsche dargestellt wurde . Jetzt stimmts:

    #include < iostream > 
    #include <string> 
    using namespace std; 
    
    int main() { 
    
    string x = 8000000; // wurde ja schon gesagt
    
    string z = 1000000; 
    
    boole ergebnis x == z ; // müsste es nicht bool sein?
    
    cin>> x >> z; // ist das nicht unnötig?
    
    if( x > z ) { // kann man strings nicht nur so vergleich: if(strcmp(str1, str2) > 0)? also mit > wird das glaube ich nichts.
    cout << " String" << x << " ist groesser als String" << z; 
    
    cout << " Bye " ; // ich wäre hier ja noch für ein: << "\n"
    
    return 0; 
    
    } 
    
    }
    

    Aber was stimmt hier nun genau nicht?



  • boole ergebnis x == z ; // müsste es nicht bool sein?
    

    Doch.

    cin>> x >> z; // ist das nicht unnötig?
    

    Nein, seine Aufgabe ist, zwei Zeichenketten einzulesen. Die obige Initialisierung ist unnötig.

    if( x > z ) { // kann man strings nicht nur so vergleich: if(strcmp(str1, str2) > 0)? also mit > wird das glaube ich nichts.
    

    Doch string s vergleichst du mit == < und >. strcmp vergleicht keine zwei string s, sondern zwei char[] .

    cout << " Bye " ; // ich wäre hier ja noch für ein: << "\n"
    

    Wieso? Danach kommt ein return 0 , was soll die neue Zeile noch bringen?


  • Mod

    out schrieb:

    cout << " Bye " ; // ich wäre hier ja noch für ein: << "\n"
    

    Wieso? Danach kommt ein return 0 , was soll die neue Zeile noch bringen?

    Sei "$>" das Kommandoprompt

    [b]$>[/b] ./programm
    Bye [b]$>[/b]
    

    vs.

    [b]$>[/b] ./programm
    Bye 
    [b]$>[/b]
    

    Sehr wichtiger Unterschied für die Benutzerfreundlichkeit.



  • out schrieb:

    if( x > z ) { // kann man strings nicht nur so vergleich: if(strcmp(str1, str2) > 0)? also mit > wird das glaube ich nichts.
    

    Doch string s vergleichst du mit == < und >. strcmp vergleicht keine zwei string s, sondern zwei char[] .

    Oh. Ach so. 😃

    out schrieb:

    cout << " Bye " ; // ich wäre hier ja noch für ein: << "\n"
    

    Wieso? Danach kommt ein return 0 , was soll die neue Zeile noch bringen?

    Hm... ja wollte er das nicht länger da stehen haben?



  • Enno schrieb:

    out schrieb:

    if( x > z ) { // kann man strings nicht nur so vergleich: if(strcmp(str1, str2) > 0)? also mit > wird das glaube ich nichts.
    

    Doch string s vergleichst du mit == < und >. strcmp vergleicht keine zwei string s, sondern zwei char[] .

    Ne, da wird nur überprüft, ob das erste Zeichen im string gößer ist als das erste Zeichen des anderen strings. Wenn du die Gesamtgröße vergleichen willst, benutzt du

    if(x.size() > z.size())



  • Incocnito schrieb:

    Ne, da wird nur überprüft, ob das erste Zeichen im string gößer ist als das erste Zeichen des anderen strings. Wenn du die Gesamtgröße vergleichen willst, benutzt du if(x.size() > z.size())

    Von Größe hat keiner was geschrieben, und dass nur die ersten Zeichen verglichen werden ist Quark, es werden alle Zeichen verglichen - soweit nötig. Wenn das erste Zeichen schon unterschiedlich ist, ist das Ergebnis ja schon klar und der Vergleich kann abgebrochen werden.

    Hat aber mit der gnazen Problemstellung nichts zu tun, der OP will ja Zahlen vergleichen, da sind strings für den Vergleich völlig fehl am platz, egal ob per op<, strcmp, string::compare oder per Vergleich von size().



  • #include < iostream >
    #include <string>
    using namespace std;
    
    int main() {
    
        string x = Kekse;
    
        string z = Brot;
    
        boole ergebnis  x == z ;
    
        cin>> x >> z;
    
        if( x > z ) {
        cout << " String" << x << " ist groesser als String" << z;
    
        return 0;
    
        }
    
    }
    

    Kann ich den string so vergleichen?



  • Beratungsresitent 😕

    oder zu viel

    boole ergebnis  x == z ; // muss da nicht bowle hin?
    

    Nicht ganz ernst - aber da du schon drauf hingewiesen ...



  • Ich habs jetzt versucht nach euren tipps bisschen zu verbessern , aber es gibt immer noch error raus:

    #include < iostream >
    #include <string>
    using namespace std;
    
    int main() {
    
        string x = Kekse;
    
        string z = Brot;
    
        bool ergebnis  x == z ;
    
        cin>> x >> z;
    
        if( x.size() > z.size() ) {
        cout << " String" << x << " ist groesser als String" << z;
    
        return 0;
    
        }
    
    }
    

    Was mache ich falsch?



  • Die geschweiften Klammern bitte nicht nach dem Zufallsprinzip verteilen, sondern mit System und Überlegung.



  • Warum schreibst du nicht die kompletten Fehlermeldung mit Zeilennummer 😕

    #include < iostream >
    
    #include <iostream> // erkennst du den Unterschied?
    


  • programmer21 schrieb:

    Was mache ich falsch?

    Dein Programm ist einfach nur Müll. Merkwürdige Formatierung, syntaktisch total falsche Initialisierung (Z. 11)(und dazu wahrscheinlich noch anders gemeint), Kekse und Brot sind doch nicht in den Standard-Headern definiert (bzw. hast du vergessen daraus ein String-Literal zu machen? Soll das eigentlich "Kekse" heißen?), falsche Einbindung von <iostream>.



  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
       {
    
        string x = Kekse;
    
        string z = Brot;
    
        bool ergebnis  x == z ;
    
        cin>> x >> z;
    
        if( x.size() > z.size() )
    
        {
        cout << " String" << x << " ist groesser als String" << z;
    
        return 0;
    
        }
    
    }
    

    Es scheint aber immer noch nicht zu funktionieren.

    error Kekse and Brot were not declared in scope

    Was mache ich falsch .



  • Jetzt bitte mal, lieber Mensch, der hinter dem Pseudonym programmer21 steht, in voller Aufrichtigkeit : Ist das Ihr Ernst?


Anmelden zum Antworten