Was ist denn mal ne WIRKLICH gute String-Klasse?



  • Java-Strings sind trotzdem bessa 😉
    Naja mal im Ernst, bei Strings kommt es mir auf die Geschwindigkeit nicht so wahnsinnig an, da ist mir der Komfort schon wichtiger.

    Das mit "1" + 1 = "11" sollte eigentlich klar sein, in VB hat man es sogar noch besser gelöst, da verknüpft man Strings mit &.

    Naja was solls, bleib ich bei meinen ostringstreams...



  • Naja was solls, bleib ich bei meinen ostringstreams...

    hmm, um es dir nochmal zu sagen, ostringstreams sind eben keine string Klasse. Warum implementierst du nicht einfach deine + oder & Operatoren? Du benutzt eine Sprache wo du so was machen kannst! Ich versteh nicht den Sinn deiner Beschwerde.



  • Was soll das heißen, ostringstream ist keine String-Klasse? Mir reicht das, wenn ich Variablen von diesem Typ erstellen kann.
    Ich schreibe zur Zeit ein recht komplexes Spiel und möchte eine fertige Lösung haben um ein bisschen Text zu verknüpfen und auszugeben (hab ich ja auch). Man soll bekanntlich das Rad nicht immer wieder neu erfinden.

    Ich war einfach erstaunt, was die Klasse String in Java leistet und hab mich gefragt, ob es das so für C++ auch gibt.



  • Optimizer schrieb:

    Das mit "1" + 1 = "11" sollte eigentlich klar sein, in VB hat man es sogar

    Ja, da musst Du auch was anderes schreiben als + . Mit + gehts zwar aber nicht immer. Manchmal gehts halt schief.

    Wenn Du mit VB und dem & Zahl einverstanden bist, bist Du sicherlich auch mit einem foo(Zahl) einvestanden 🤡



  • Manchmal gehts halt schief.

    In VB ist es eigentlich so gedacht, dass man + gar nicht für String-Operationen verwendet. Dann geht auch nichts schief.

    Aber egal, VB lutscht halt trotzdem 😢



  • Ja aber es geht 🤡

    Ehrlich gesagt wäre es mir aber lieber es ging nicht. Hab auch schon oft geflucht weil man alles hin und her wandeln muß. Aber man kommt so zu wesentlich weniger Überraschungen....

    Aber mal so nebenbei gefragt: Für was is + bei Strings und VB gedacht ?



  • Frag mich nicht, nimms einfach nicht her. 🙂
    Wenn du & nimmst ist auch immer sofort ersichtlich, wo eine Rechnung ist und wo eine Stringverknüpfung.



  • Optimizer schrieb:

    Java-Strings sind trotzdem bessa 😉

    da hilft nur eines: benutze java.



  • Was soll das heißen, ostringstream ist keine String-Klasse?

    Welcher Teil des Satzes ist unklar?

    Mal ganz grob: Eine Stringklasse ist eine Abstraktion zur Manipulation von Zeichenketten.
    ostringstream hingegen ist eine Abstraktion eines Streams der als "physisches Ausgabegerät" einen String verwendet.

    Ich schreibe zur Zeit ein recht komplexes Spiel und möchte eine fertige Lösung haben um ein bisschen Text zu verknüpfen und auszugeben

    Neben der bereits mehrfach erwähnten Lösung finde ich persönlich boost::lexical_cast auch ganz hübsch.



  • Gut, ich muss ganz ehrlich zugeben, mir ist eigentlich nicht ganz klar was streams sind. Ich werd mich da mal schlau machen...
    Irgendwann wenn ich mal Zeit und Bock hab schreib ich mir auch ne eigene String-Klasse (ich hab sogar mal vor einem Monat damit angefangen).

    Ich persönlich finde, dass Java eigentlich (nicht nur deswegen) eine viel bessere Sprache ist, das Problem ist nur, dass ich mir nicht vorstellen kann, damit Spiele zu entwickeln.



  • dein Problem scheint mir zu sein, dass du C++ nicht verstehst. Zumindest kann ich das aus deinen Beiträgen der letzten Tagen in dem Forum erkennen.

    Und das du das Verhalten mit 4 Zeilen Code erzeugen kannst und dir keine String Klasse implementieren musst, hast du wohl auch noch nicht verstanden?



  • Ich persönlich finde, dass Java eigentlich (nicht nur deswegen) eine viel bessere Sprache ist, das Problem ist nur, dass ich mir nicht vorstellen kann, damit Spiele zu entwickeln.

    Diese Aussage ist, äh, wirr. Entweder du machst absolute Aussagen, wie "Java ist eine viel bessere Sprache als Foo". Dann nimmt dich wahrscheinlich keiner ernst und du musst sie am Ende selbst relativieren (wie hier) oder du lernst, dass Programmiersprachen nur Mittel zum Zweck sind und triffst lieber Aussagen wie "Java ist meiner Meinung nach das Beste Werkzeug zur Erstellung von Foo-Anwendungen, für Bar-Anwendungen scheint es mir aber nicht so brauchbar zu sein".

    Danach solltest du dich noch mit dem Gedanken anfreunden, dass jede Sprache ihre eigenen Idiome besitzt und das es keinen Sinn macht in einer Sprache A so zu programmieren, als würde man die Sprache B einsetzen.
    Du kannst nicht versuchen in Java C++ zu programmieren und dann der Sprache vorwerfen, dass dies nicht funktioniert. Und andersherum geht das natürlich auch nicht.



  • Guck dir mal Mr.Ns Beispiel an:

    template<class T, class Ch, class A> std::basic_string<Ch, std::char_traits<Ch>, A> operator+(T const &a, std::basic_string<Ch, std::char_traits<Ch>, A> const &b) { 
      ostringstream s; 
      s << a << b; 
      return s.str(); 
    } 
    
    template<class T, class Ch, class A> std::basic_string<Ch, std::char_traits<Ch>, A> operator+(std::basic_string<Ch, std::char_traits<Ch>, A> const &a, T const &b) { 
      ostringstream s; 
      s << a << b; 
      return s.str(); 
    }
    

    Und schon hat die String-Klass einen + Operator, mit dem du alles anhängen kannst, was auch an ostreams mit << geschickt werden kann.

    Dann funzt auch

    string a = "1";
    string b = a + 1;
    cout << b;  // 11
    


  • Und das du das Verhalten mit 4 Zeilen Code erzeugen kannst und dir keine String Klasse implementieren musst, hast du wohl auch noch nicht verstanden?

    Es gibt noch einige Sachen, die ich in einer String-Klasse anders machen würde. Nicht nur den Operator '+'. '+' hat in meiner String-Klasse gar nichts zu suchen, weil er zweideutig ist (man könnte ihn mit dem mathematischen + verwechseln).
    Mir ist das alles im Moment nicht so wichtig, ich nehme das mal später in Angriff. Im Moment konzentriere ich mich mal darauf mein Spiel fertig zu stellen. Ich wollte eigentlich nur wissen, ob es eine fertige String-Klasse gibt, die ähnlich arbeitet wie die von Java.

    Du kannst nicht versuchen in Java C++ zu programmieren und dann der Sprache vorwerfen, dass dies nicht funktioniert. Und andersherum geht das natürlich auch nicht.

    Java ist eine weiterentwicklung von C++ und hat das Prinzip der Objektorientierung weiter vertieft bzw. zwingt den Programmierer schon fast dazu, OO zu programmieren. Ich war erst skeptisch, als wir im Grundstudium mit Java angefangen haben, aber es hat mich überzeugt.
    Java ist MEINER MEINUNG nach die bessere Sprache. Aber das nützt mir für Spiele jetzt auch nichts.
    Reagiert halt nicht gleich so gereizt, euer geliebtes C++ hat auch ein paar Schwachstellen.



  • Hallo,
    erst beschwerst du dich, dass es kein + für std::string und Zahlen gibt und dann:

    '+' hat in meiner String-Klasse gar nichts zu suchen

    Was denn nu?

    Java ist eine weiterentwicklung von C++

    Tatsächlich. Das ist mir aber ganz neu.

    Reagiert halt nicht gleich so gereizt, euer geliebtes C++ hat auch ein paar Schwachstellen.

    Niemand hat etwas gegenteiliges behauptet. Und ich sehe auch nicht, wo jemand gereizt reagiert hat.
    Ich habe sogar darauf hingewiesen, dass es sinnlos ist, Programmiersprachen absolut zu beurteilen, da die Stärken und Schwächen einer Sprache kontextabhängig sind.



  • Hallo,
    erst beschwerst du dich, dass es kein + für std::string und Zahlen gibt und dann:
    Zitat:
    '+' hat in meiner String-Klasse gar nichts zu suchen

    Was denn nu?

    So wie es in VB ist (siehe oben). Wenn man z.B. den Operator '&' verwendet, ist sofort offensichtlich, was gemeint ist:

    String myString = "Aufgabe Nummmer " & number & ":\n1 + 1 = " & 1 + 1 & ", war doch gar nicht so schwer."
    

    Zitat:
    Java ist eine weiterentwicklung von C++

    Tatsächlich. Das ist mir aber ganz neu.

    His extensions and modifications to C++ (also know as C++ ++ --), were the first steps towards the development of an independent language that would fit the project objectives. He named the language "Oak" [...]

    Oak wurde später noch weiterentwickelt und zu Java unbenannt - aus Lizenzrechtlichen Gründen, soweit ich weiß.
    Quelle: http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html



  • Wenn man z.B. den Operator '&' verwendet, ist sofort offensichtlich, was gemeint ist:

    Nein. Das ist imo eine Gewöhnungssache. Ich finde das '&' z.B. total unintuitiv, da es für mich ein bitweise-und repräsentiert. Ich hätte z.B. jetzt behauptet, dass '+' der beste Operator für Konkatenation von Strings ist (in Abwesenheit eines ausgefüllter-Kreis-Operators). Das liegt aber wohl daran, dass ich a) hauptsächlich mit Sprachen arbeite, die diesen Operator dafür verwenden und b) in der Uni bereits das ein oder andere mal + als Konkatenations-Op für Wörter verwendet habe.



  • Optimizer schrieb:

    His extensions and modifications to C++ (also know as C++ ++ --), were the first steps towards the development of an independent language that would fit the project objectives. He named the language "Oak" [...]

    Oak wurde später noch weiterentwickelt und zu Java unbenannt - aus Lizenzrechtlichen Gründen, soweit ich weiß.
    Quelle: http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html

    Ich dachte immer Weiterentwicklungen fügen etwas innovatives hinzu statt es zu entfernen.

    Insofern halte ich "Weiterentwicklung" für das falsche Wort. Naja, was soll's 🙂



  • Ich dachte immer Weiterentwicklungen fügen etwas innovatives hinzu statt es zu entfernen.

    hehe 🙂



  • Helium schrieb:

    Guck dir mal Mr.Ns Beispiel an:

    template<class T, class Ch, class A> std::basic_string<Ch, std::char_traits<Ch>, A> operator+(T const &a, std::basic_string<Ch, std::char_traits<Ch>, A> const &b) { 
      ostringstream s; 
      s << a << b; 
      return s.str(); 
    }
    

    Hmm, mir ist nicht ganz klar, wieso man einerseits die Funktion so konstruiert, dass sie zwar jeder Spezialisierung von basic_string klarkommt, andererseits aber wieder in einen normalen handelsüblichen ostringstream schreiben will.


Anmelden zum Antworten