Warum denken Sie, ist es so, dass die meisten C ++ - Lehrer, die Informatik auf College-Ebene unterrichten, davon abhalten oder sogar verbieten, Zeichenfolgen für Text zu verwenden, anstatt von den Schülern die Verwendung von Zeichenarrays zu verlangen?
Ich gehe davon aus, dass diese Methode irgendwie dazu gedacht ist, gute Programmiergewohnheiten zu vermitteln, aber meiner Erfahrung nach sehe ich nichts falsches daran, nur Strings zu verwenden, und sie sind wesentlich einfacher zu verwenden und zu lernen.
Antworten:
Für einen CS-Studenten kann der Professor std :: string entmutigen und nach char array fragen, um die Grundlagen des Arrays zu vermitteln. In meiner Schule, fragte der Lehrer uns C - Routinen wie zu schreiben
strlen
,strcmp
usw. auf unserem eigenen. Es kann dann kein niedriges Niveau erreichen (Verlassen der Baugruppe!).Durch die Verwendung eines Arrays anstelle eines Strings können Sie die Speicherverwaltung und String-Operationen, insbesondere das Parsen von Strings, erlernen. Wenn Sie über ein Array iterieren, analysieren Sie im Grunde die Zeichenfolge und suchen nach Leerzeichen, Sonderzeichen, Token usw.
Aber ich empfehle Array überhaupt nicht über String. Ich gebe nur einen Grund an, mit Arrays an der Universität fertig zu werden.
quelle
Koenig und Moes Accelerated C ++ und Stroustrups Programmierung: Prinzipien und Praxis Die Verwendung von C ++ verwendet von Anfang an std :: string und andere Komponenten aus der Standardbibliothek. Wenn ich mich richtig erinnere, präsentieren sie nicht einmal C-Arrays für Koenig und Moe und Stroustrup macht es ziemlich spät im Buch (vielleicht sogar nur in einem Anhang).
Dieser als modern bezeichnete Ansatz ist in meinen Kreisen der bevorzugte. Der andere Ansatz, der oft als historisch bezeichnet wird , folgt genauer der Entwicklung von C ++, nutzt jedoch nicht die "neuere" Entwicklung (relativ, sie sind jetzt 15 Jahre alt) und lehrt nicht, was jetzt praktiziert wird (zumindest nicht weiter) Projekte, die nicht mit zu viel Vermächtnis belastet sind), aber vor 10 Jahren (es gibt immer eine Verzögerung, bevor sie zum Mainstream werden).
quelle
Ich kann nichts über "die meisten" gegenüber "einigen" Programmierlehrern sagen, aber ich kann sagen, dass in einem CS-Lehrplan die frühen Programmierkurse zwei Ziele haben:
Diese sind manchmal etwas uneins, und verschiedene Lehrer machen unterschiedliche Kompromisse.
quelle
Ich denke, es hängt davon ab, was Sie in diesem Kurs unterrichten wollen ... "Informatik" ist eine etwas vage Definition.
Wenn sich der Kurs mit Algorithmen und Datenstrukturen befasst, hat das Unterrichten von Studenten
std::string
absolut keinen didaktischen Wert. Die Verwendung vonchar
Arrays als Einführung in Arrays und Operationen darauf ist jedoch durchaus legitim.Wenn es sich bei dem Kurs um Objektdesign handelt, hat er vermutlich
std::string
einen Wert als Beispiel für einen abstrakten Datentyp.Wenn es sich bei dem Kurs nur um Best Practices in C ++ handelt, würde ich mir Gedanken darüber machen, an welcher Hochschule Sie studieren und wie sie ihren Lehrplan für Informatik gestalten.
quelle
Ich denke, Sie haben das eigentliche Ziel Ihres Kurses falsch verstanden, da gutes C ++ (im Grunde genommen) die Abstraktionen verwendet, die von der Standardbibliothek bereitgestellt werden (warum sollten Sie das Rad neu erfinden?).
In seinen FAQ gibt es sogar ein Zitat von Stroustrup mit dem Titel "Arrays von Schnittstellen fernhalten", in dem er einige Hinweise zum Schreiben von sicherem Code gibt. Daher bezweifle ich, dass Ihnen tatsächlich gesagt wird, dass Sie sie nicht verwenden sollen, weil sie schlecht sind, sondern dass Sie einige Grundlagen der Funktionsweise der Dinge lernen müssen, damit Sie dieses Verständnis später nutzen können, wenn Sie tatsächlich in die Optimierung oder andere Arbeiten einsteigen müssen, für die Sie arbeiten brauche die wirklichen Grundlagen.
quelle
In einigen Fällen sind Zeichenfolgen gut, in anderen Fällen sind sie für char nicht gleich
/ ** Beispiel 1 String-Verwendung In diesem Fall wird der String durch Leerzeichen an der Ausgabe abgeschnitten, wenn wir del test.txt geschrieben haben. Die Ausgabe ist Zeile 1 del Zeile 2 test.txt, was nicht gut ist ** /
/ ** Beispiel 2 dasselbe Programm, aber wir übergeben die Eingabe in einem Zeichen mit einem Feld von 80. Die Ausgabe für dieselbe cmd wie das erste Beispiel ist del test.txt in derselben Zeile, die gut ist ** /
Zeichenfolgen sind Objekte, die Zeichenfolgen darstellen.
Die Standardzeichenfolgenklasse bietet Unterstützung für solche Objekte mit einer Schnittstelle, die der eines Standardcontainers von Bytes ähnelt, jedoch Funktionen hinzufügt, die speziell für die Arbeit mit Zeichenfolgen mit Einzelbytezeichen entwickelt wurden.
Die Zeichenfolgenklasse ist eine Instanziierung der Klassenvorlage basic_string, die char (dh Bytes) als Zeichentyp mit den Standardtypen char_traits und Allocator verwendet (weitere Informationen zur Vorlage finden Sie unter basic_string).
Beachten Sie, dass diese Klasse Bytes unabhängig von der verwendeten Codierung verarbeitet: Wenn sie zur Verarbeitung von Sequenzen von Zeichen mit mehreren Bytes oder variabler Länge (z. B. UTF-8) verwendet wird, werden alle Mitglieder dieser Klasse (z. B. Länge oder Größe) sowie Die Iteratoren arbeiten weiterhin in Bytes (keine tatsächlich codierten Zeichen). -C ++ Referenz http://www.cplusplus.com/reference/string/string/ [1]:
Ich schlage vor zu schauen:
quelle