Ersatz für strlen gesucht
-
Guten Abend allerseits,
ich bin neu hier im Forum, deshalb entschuldigt mich bitte, falls ich etwas nicht gleich richtig mache oder meine Frage vielleicht ähnlich irgendwo schon existiert. Da das neue Jahr noch nicht alt ist, wünsche ich erstmal ein frohes neues Jahr.
Ich habe früher in der Schule JAVA im Unterricht gehabt, jedoch bin ich in C++ blutiger Anfänger Ich sitze gerade an einem Programm, welches eine Textdatei auslesen soll. Das Programm läuft, nur leider wurde mir mitgeteilt, dass ich die Header Datei <cstring> nicht nutzen darf. Deshalb habe ich ein Problem: kann man auch ohne cstring den Befehl strlen umsetzen?
Ich lese mitint length = strlen(word[w]);
die Länge der eingelesenen Wörter aus, um sie später in der Textdatei wiederzufinden. Ohne strlen geht aber leider gar nichts mehr
Der Befehl aus der Übung greift leider nicht, weil der Compiler mir dann den Fehler "ISO C++ forbids comparison betwenn pointer und integer" liefert. Der Befehl ginge so:int len; //Wortlänge definieren for (len=0; wort[len]!='\0'; len++);
Hat jemand eventuell einen Vorschlag, wie man auch ohne <cstring> int length definieren kann?
Vielen Dank im voraus und liebe Grüße
-
@Al3xxx9 sagte in Ersatz für strlen gesucht:
Hat jemand eventuell einen Vorschlag, wie man auch ohne <cstring> int length definieren kann?
Man macht keinen vollständig bescheuerten C++ Kurs und verwendet std::string. Die Klasse hat eine length Funktion.
Da du nicht zeigst, was word bzw. wort ist, kann man zu dem Fehler nur in die Glaskugel schauen. Das ergibt, dass du word[w][len] suchst.
-
@manni66
Danke für deine Antwort
Wie ist das mit std::string gemeint? Ich habe folgendes probiert:int length = string(word[w]);
Das funktioniert leider nicht. Es kann sein, dass ich mich doof anstelle, aber ich verstehe nicht wie ich am ende meine variable length aus std::string wieder bekomme Oder benötige ich dafür #include <string>? Wenn ja darf ich das auch nicht nutzen. Kann leider nur iostream und fstream verwenden...
PS: word ist vom Typ char
-
@Al3xxx9 sagte in Ersatz für strlen gesucht:
PS: word ist vom Typ char
Nein, sicher nicht. Zeige den vollständigen Code.
Es war mir schon klar, dass du std::string nicht verwenden darfst. Dein Kurs ist absoluter Schrott und der Lehrer inkompetent.
-
Sinn und Zweck der Aufgabe ist es, dass Du
strlen
einfach selbst schreibst. Man kann jetzt darüber philosophieren, ob das der richtige Weg ist C++ zu lehren. Wird Dir nur nicht viel helfen.
-
Schau in der cppreference nach, was
strlen
macht:
https://en.cppreference.com/w/cpp/string/byte/strlenDann schaust du unter "Possible implementation" und tada.
Wenn du C++ lernen willst, nimm
std::string
. Siehe auch "Stop teaching C" - über strings ab 8:15 hier: https://youtu.be/YnWhqhNdYyk?t=495 (also "Stop teaching C" gilt natürlich nur, wenn es ein C++-Kurs ist, nicht wenn du C lernen willst)
-
Hallöchen an alle. Danke für eure Antworten und Hilfestellungen Ich habe es nun hinbekommen:
for (int w = 0; w<3; w++) { int length=0; //Wortlänge definieren while ((length<anz+1) && (word[w][length]!='\0')) length++; ....
Das Programm funktioniert jetzt erstaunlicherweise auf Anhieb. Ich wollte es nur nochmal hier teilen, falls jemand auf ähnliche Probleme stößt. Danke trotzdem vielmals und ich werde dennoch mehr mit string Befehlen probieren, obwohl es mir im Rahmen des Kurses nicht helfen wird (da nicht nutzbar). Das Thema kann somit als abgeschlossen gelten.
Schönes Wochenende allerseits
-
@Al3xxx9 sagte in Ersatz für strlen gesucht:
Das Programm funktioniert jetzt erstaunlicherweise auf Anhieb
Für eine merkwürdige Definition von "funktioniert".
for (int w = 0; w<3; w++)
Wo kommt da die 3 her?
Und was ist
anz
inwhile ((length<anz+1)
?Mache eine Sache (String-Länge) in einer Funktion! Nicht noch irgendwelche anderen Dinge!
word[w][length]!='\0')
Du hast offensichtlich nicht einen String (char-Array), sondern ein Array davon. Dein strlen-Ersatz soll aber doch bestimmt nicht so speziell sein!
-
@Al3xxx9 sagte in Ersatz für strlen gesucht:
int length = strlen(word[w]);
Wenn das funktioniert, dann muss word[w] vom Typ
char*
(Pointer aufchar
) oderchar[]
(Array vonchar
) sein.
Dann ist word z.B, ein 2D-Array vonchar
.int len; //Wortlänge definieren
for (len=0; wort[len]!='\0'; len++);Das '\0' ist ein
char
(bzw.int)
, wort[len] ist einchar*
Das sind sehr verschiedene Dinge, aber das hat dir der Compiler ja gesagt.