Stringlänge berechen



  • redrew99 schrieb:

    string in c++ ist im Grunde eine Klasse, kein Datentyp wie z.B. ein Char.
    (Zumindest sollte man das als Anfänger zum Lernen so handhaben.)
    Deswegen kann man mit Strings nicht das Gleiche machen wie mit Chars.

    Was meinst du genau mit "Datentyp" im C++ Kontext?! Ein Typ für Variablen, in denen man Werte speichern kann? Das wären dann "Objekttypen". Klassen sind allerdings auch Objekttypen. Oder willst du hier auf die POD-Eigenschaft hinaus?

    Ich bin der Meinung, dass man einen Anfänger nicht unnötig mit Unterkategorien wie POD belasten muss. PODness wird erst interessant, wenn man an Objekte z.B. per memcpy ran oder mit C interfacen will.

    Ich sehe absolut keinen Sinn darin, zwischen built-in Typen und Klassentypen zu unterscheiden, wenn sie sich praktisch in den ersten Übrungen tatsächlich nicht unterscheiden. Ob du jetzt std::string oder int oder double verwendest, Objekte dieser Typen lassen sich kopieren, zuweisen, u.s.w. -- alles ganz normale Sachen.

    Und natürlich ist std::string nicht dasselbe wie char. std::string ist ein Objekttyp für Variablen zum Speichern von Zeichenketten. char ist ein Objekttyp für Variablen zum Speichern einzelner Zeichen.



  • silent_max schrieb:

    Belli schrieb:

    Was soll der Scheiß-Link? Wo ist da eine Klasse cstring?

    Also unter C++ Reference gibt es unter der Rubrick C Library die Unterrubrick cstring(string.h). Schau halt nach...

    Wie schon geschrieben: Woher meinst denn Du, dass ich z.Bsp. die Funktion strchr habe?

    Na dann ... und ... schon mal ein Objekt der Klasse cstring erstellt?

    Ich gebs jetzt endgültig auf, ich verspreche es!



  • silent_max schrieb:

    Belli schrieb:

    Was soll der Scheiß-Link? Wo ist da eine Klasse cstring?

    Also unter C++ Reference gibt es unter der Rubrick C Library die Unterrubrick cstring(string.h).

    Das ist aber keine Klasse.

    Schau halt nach...

    Vielleicht solltest du einfach mal den Ball flachhalten, du bist hier derjenige, der keinen Plan hat.



  • C-String
    Bibliothek: string
    Datentyp: char
    Mit C-String meine man eine Folge von Zeichen des Types char, die mit '\n' abgeschlossen wird.

    C++ - String
    Bibliothek: string
    Datentyp: std::string
    Der in der Standardbibliothek definierte Typ basic_string ist ein Template und ermöglicht das Arbeiten mit verschiedenen Zeichen, also auch mit >>wide characters(Typ wchar_t

    Habe ich es jetzt verstanden?????



  • Bashar schrieb:

    silent_max schrieb:

    Schau halt nach...

    Vielleicht solltest du einfach mal den Ball flachhalten, du bist hier derjenige, der keinen Plan hat.

    Na lass mal gut sein, frech oder unverschämt ist er noch nicht geworden, man kann ihm wirklich viel vorwerfen, aber das nicht.



  • @max:
    Halt Dich einfach - vorläufig (und damit meine ich nicht nur ein paar Tage) - von allem was unter
    C library
    aufgeführt ist, fern!
    Benutze - vorläufig (siehe oben) - weder
    char varName [];
    noch
    char *varPtr;

    Interessiere Dich - vorläufig - einfach nicht für C-Strings und alles was damit zu tun hat, sondern ausschließlich für std::string und die std::string - Methoden. Vielleicht wird es dann ja mal was ....



  • @silent_max:

    vielleicht solltest du lieber mit der folgenden Referenz arbeiten:

    http://en.cppreference.com/w/Main_Page



  • String class
    String objects are a special type of container, specifically designed to operate with sequences of characters.

    Also noch mal in meinen Worten gefasst:

    String Objekte sind ein spezieller Typ von Container, speziell entworfen für das Arbeiten mit Zeichen



  • Ja genau ... und deshalb vergiss einfach, dass es sowas wie C-Strings auch noch gibt - vorläufig jedenfalls, die brauchst Du nämlich - vorläufig - nicht!
    Das bewahrt Dich davor, die Dinge durcheinanderzuwerfen.



  • Belli schrieb:

    Ja genau ... und deshalb vergiss einfach, dass es sowas wie C-Strings auch noch gibt - vorläufig jedenfalls, die brauchst Du nämlich - vorläufig - nicht!
    Das bewahrt Dich davor, die Dinge durcheinanderzuwerfen.

    Ja ok...

    Edit: Nur damit ich das verstehe ... C-Strings haben rein gar nichts mit C++-Strings zu tun.



  • Ehrlich, da bin ich mir selbst nicht so ganz sicher ...
    Es schadet aber nicht, wenn man das so unterstellt. Ganz sicher aber kannst Du mit den Funktionen der C library, die für den Umgang mit C-Strings geschrieben sind, nichts anfangen, wenn Du mit std::string hantierst, diese Klasse bringt alles Wichtige selbst in Form von Methoden mit.

    Irgendwann wird Dein Horizont sich Stück für Stück erweitern, wenn Du fleißig weiter programmierst und lernst, dann wirst Du selbst die Unterschiede erkennen und bewerten können.

    silent_max schrieb:

    Nur damit ich das verstehe ... C-Strings haben rein gar nichts mit C++-Strings zu tun.

    Siehe oben:
    Vergiss einfach (vorläufig), dass es C-Strings gibt, dann stellt sich diese Frage auch nicht.

    Du brauchst sie nicht!



  • silent_max schrieb:

    Belli schrieb:

    Ja genau ... und deshalb vergiss einfach, dass es sowas wie C-Strings auch noch gibt - vorläufig jedenfalls, die brauchst Du nämlich - vorläufig - nicht!
    Das bewahrt Dich davor, die Dinge durcheinanderzuwerfen.

    Ja ok...

    Edit: Nur damit ich das verstehe ... C-Strings haben rein gar nichts mit C++-Strings zu tun.

    Höre auf Belli und vergiss C-Strings vorläufig.

    Der Vollständigkeit wegen: Die C++-String-Klasse arbeitet i.d.R. intern mit char-Arrays.



  • kk-in-hh schrieb:

    Ob du jetzt std::string oder int oder double verwendest, Objekte dieser Typen lassen sich kopieren, zuweisen, u.s.w. -- alles ganz normale Sachen.

    Das ist doch nur bedingt richtig.
    Einem Anfänger vermittelst Du damit, daß ein std::string genauso zu handhaben ist wie ein int oder ein char. Was ja aber nicht richtig ist. Spätestens dann, wenn man 2 Strings addiert hat und das gleiche dann mit 2 Chars versucht, tauchen Fragen auf.

    Verstehen kann man das nur, wenn man weiß, daß String eine Klasse ist.



  • Blödsinn.
    Wären strings nicht Klassen,sondern eingebaute Typen, könnten sie doch genau so funktionieren.
    Wenn man ints dividiert (7/3) und floats (7.0/3.0), ergeben sich für 90% der Anfänger auch Fragen, obwohl nur eingebaute Typen beteiligt sind.



  • redrew99 schrieb:

    kk-in-hh schrieb:

    Ob du jetzt std::string oder int oder double verwendest, Objekte dieser Typen lassen sich kopieren, zuweisen, u.s.w. -- alles ganz normale Sachen.

    Das ist doch nur bedingt richtig.
    Einem Anfänger vermittelst Du damit, daß ein std::string genauso zu handhaben ist wie ein int oder ein char. Was ja aber nicht richtig ist.

    Ich behaupte nicht, dass du int durch string ersetzten kannst und das dann dein Programm noch funktioniert. Das wäre ja Quatsch, weil int-Variablen zum Speichern von Ganzzahlen und string-Variablen zum Speichern von Zeichenketten da sind. Ich sehe nur nicht, warum du darauf rumreitest, dass std::string eine Klasse ist. Du hast es versucht zu begründen. Aber das war nicht überzeugend. Ich finde es eher schade, dass du so denkst; denn es ist doch gerade eine der Stärken von C++, dass die Grenze zwischen benutzerdefinierten und eingebauten Typen verschwimmt.



  • kk-in-hh schrieb:

    Ich behaupte nicht, dass du int durch string ersetzten kannst und das dann dein Programm noch funktioniert.

    So konkret zwar nicht, aber Deine und auch andere Äußerungen gehen so sehr in diese Richtung, daß man das entsprechend mißverstehen könnte.
    z.B.(man beachte insbesondere daß "u.s.w.")

    kk-in-hh schrieb:

    Ob du jetzt std::string oder int oder double verwendest, Objekte dieser Typen lassen sich kopieren, zuweisen, u.s.w. -- alles ganz normale Sachen.

    kk-in-hh schrieb:

    denn es ist doch gerade eine der Stärken von C++, dass die Grenze zwischen benutzerdefinierten und eingebauten Typen verschwimmt.

    Ich stimme Dir zu, wenn es um das Programmieren geht, nicht um das Lernen.
    Meiner Ansicht ist es zunächst besser, einem Anfänger zu sagen, daß er Strings eher so handhaben soll, als würde er mit einer Klasse hantieren und nicht mit einem Datentyp wie int/char/etc.. Dann kommt er auch nicht auf die Idee, Chars zu addieren.(Weil das ja mit Strings auch geht.)



  • Es geht doch nicht darum, Typen zu addieren oder nicht zu addieren. Warum soll man chars denn nicht addieren?
    Die Fragen sind doch einfach nur:
    Ist die Addition für einen Datentyp definiert, und wenn ja, wie ist sie definiert, also was kommt heraus.
    Diese Fragen muss man sich halt stellen, warum sollte ein Anfänger das nicht tun?



  • Belli schrieb:

    Es geht doch nicht darum, Typen zu addieren oder nicht zu addieren. Warum soll man chars denn nicht addieren?
    Die Fragen sind doch einfach nur:
    Ist die Addition für einen Datentyp definiert, und wenn ja, wie ist sie definiert, also was kommt heraus.
    Diese Fragen muss man sich halt stellen, warum sollte ein Anfänger das nicht tun?

    Wenn man einem Anfänger sagt, daß für Strings und Chars die Addition definiert ist, wird er in der Regel selbstverständlich beide Datentypen addieren.
    Bloß mit dem Unterschied, daß da völlig unterschiedliche bzw. völlig falsche Ergebnisse bei rauskommen.



  • Da kommen nicht falsche Ergebnisse heraus, sondern unterschiedliche.
    Genau so wie bei 7/3 einerseits und 7.0/3.0 andererseits.
    Oder soll man dem Anfänger deshalb verschweigen, dass man auch ints dividieren kann?



  • Belli schrieb:

    Da kommen nicht falsche Ergebnisse heraus, sondern unterschiedliche.

    Nein, falsche. Wenn ich Strings addiere und meine, das gleiche mit Chars machen zu können, weil mir das irgendjemand so oder ähnlich gesagt hat, bekomme ich ein falsches Ergebnis. Umgekehrt genauso, habe ich gelernt, daß man Chars addieren kann und dann kommt so jemand wie z.B. Du, der sagt, och, daß kann man mit Strings auch machen, weil für Strings ja auch die Addition definiert wurde, bekomme ich wieder ein falsches Ergebnis.
    Das Ergebnis muß falsch sein, weil ich egal, von welcher Perspektive(Char oder String) ausgehe, völlig andere Ziele verfolge.

    Wenn mir allerdings jemand vorher gesagt hätte, daß String eine Klasse ist und man innerhalb von Klassen Addition begrenzt individuell definieren kann,sprich "+" so definiert hat, daß man damit z.B. zwei Strings zusammenfügen kann, werde ich diesen Fehler in der Regel nicht machen, einfach weil das Verständnis der Zusammenhänge besser ist.


Anmelden zum Antworten