M
unskilled schrieb:
Ich bin übrigens der Meinung, dass die starke C-Orientierung im Kurs viel Sinn macht.
Die Diskussion hatten wir hier schon ca. 82938mal - es gibt da wohl mehrere ansichten - ich weiß allerdings nicht, wieso man als C++ Anfänger char*-gefrickel vor std::string erlernen sollte...
Naja, du solltest halt den Kontext einbeziehen. In dem Kurs sitzen hauptsächlich Studierende der Informatik, die mindestens im 3. Semester sind. Die haben in der Regel schon Kenntnisse in mehreren Programmiersprachen und sind durchaus in der Lage sich irgendwelche fertigen Libarys anzuschauen und zu benutzen. Doch das bringt halt alles nichts, wenn die Grundlagen der Sprache nicht verstanden worden sind. Gerade Pointer/References (C-Strings sind hierzu doch ein gute Übungsmöglichkeit) sind häufige Fehlerquellen für Anfänger.
unskilled schrieb:
int strlen(const char * string)
{
for(int i = 0;; ++i)
{
if(string[i] == '\n' || string[i] == '\0')
{
return i;
}
}
}
'\n' hat nichts darüber auszusagen, ob ein string zu ende ist...
Bsp.: "Hallo\r\nWelt!"
richtiger wäre:
int strlen(const char *str)
{
int R;
for(R = 0; str[R] != '\0'; ++R)
;
return R;
}
Das der Zeilenumbruch einen String nicht beendet war mir bewusst. Die Aufgabenstellung war jedoch Wörter einzulesen, keine Sätze. Und beim Einlesen des String mit fgets() wird halt nunmal auch immer ein \n angehängt. Das wollte ich halt nicht mitzählen.
unskilled schrieb:
warum es nicht sonderlich klug ist, auf vorgefertigte fkt zu verzichten wird auch hier wieder klar: es muss eben nicht immer funktionieren... es wird zwar auf PCs funktionieren, aber ist nicht festgeschrieben, dass a..z direkt nacheinander kommen - auch bei A..Z nicht.
normalerweise müsste man das wohl mit riesen switch-blöcken machen müssen...
schrecklich ist vor allem, dass du die ascii-werte nimmst - völlig unnötig...
Mir ist schon klar, dass in der Praxis vorgefertigte Funktionen sicherer und effizienter sind. Doch darum ging es hier ja garnicht, deshalb verstehe ich jetzt die Belehrungen auch nicht.
Mir ist auch bewusst, dass mein Code nicht hübsch ist. Das war eine freiwillige Übungsaufgabe für mich, die ich nicht bis zur Perfektion verfolgt habe. Ich habe sie hier halt nur gepostet, weil jemand exakt das selbe machen musste und ein paar Anregungen vielleicht dabei waren.