Stringlänge berechen
-
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.
-
Kann man nun
charundstringsunabhängig von einander addieren oder nicht??
-
Das, worüber die sprechen, ist dieses Verhalten:
char c = 'a'; c += 1; cout << c; // Gibt wahrscheinlich b aus. c += 'a'; cout << c; // Gibt irgendwas ausDas liegt daran, dass "char" auch nur ein integraler Typ ist (wie short, int, long, ..), nur ist char halt nur ein Byte groß. Während mit std::string:
std::string s = "abc"; s += "blubb"; cout << s; // gibt abcblubb ausDas liegt daran dass std::string eben eine Klasse ist, und da der operator + (und +=) überladen ist, und der kopiert da dann hübch irgendwelche Strings zusammen. (Und reserviert nebenbei auch noch neuen Speicher bei Bedarf etc.)
-
silent_max schrieb:
Kann man nun
charundstringsunabhängig von einander addieren oder nicht??Kann man, allerdings hat die Addition unterschiedliche Auswirkungen:
Beispiel:#include <iostream> #include <string> using namespace std; int main () { char u = '2'; char x = '2'; char i = u + x; cout<<i<<endl; string a="2"; string b="2"; string c = a + b; cout<<c<<endl; }Bei der ersten Addition werden die zugehörigen Nummern der ASCII-Tabelle addiert, also "2" hat die Nummer 50, macht in Addition also 100. 100 wiederum steht für das Zeichen "d", was dann auch als Ergebnis ausgegeben wird.
Schau Dir dazu am Besten mal die ASCII-Tabelle an.Bei der zweiten Addition hingegen wird aus beiden Buchstaben eine Zeichenkette, also "22" gebildet.
-
redrew99 schrieb:
[...]
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.Okay, ich gebe mich geschlagen. Wer std::strings addiert, bekommt ein falsches Ergebnis.
-
@silent_max: "Programmieren ist nicht schwer" (die anderen hören ma weg :p). Letzten Endes führt es auf eine idiotensichere Schritt für Schritt Anweisung hinaus, was zu tun ist.
Also machst doch wirklich so, dass wenn du eine Zeile Code tippelst dir selber genau überlegst; "Kann ich das Ausführen was das steht" und "Was tut es". Spiel einfach Computer wärend du programmierst.Fazit: Kommentiere deinen Code so, das es wirklich idiotensicher zu verstehen ist.
Überlege dir einfach was passieren würde wenn du deine Schritt für Schritt Anleitung jemanden gibst der wirklich von nix ne Ahnung hat und der solle diese Anweisung ausführen.
-
ScottZhang schrieb:
Fazit: Kommentiere deinen Code so, das es wirklich idiotensicher zu verstehen ist.
Überlege dir einfach was passieren würde wenn du deine Schritt für Schritt Anleitung jemanden gibst der wirklich von nix ne Ahnung hat und der solle diese Anweisung ausführen.Werde ich ab sofort machen. Vielleicht hilft es mir, meinen eigenen Code besser zu verstehen.
Für euch wird es wahrscheinlich dann auch einfacher sein, es nachvollziehen zu können.