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 mit

    int 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/strlen

    Dann 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 in while ((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 auf char) oder char[] (Array von char) sein.
    Dann ist word z.B, ein 2D-Array von char.

    int len; //Wortlänge definieren
    for (len=0; wort[len]!='\0'; len++);

    Das '\0' ist ein char (bzw. int), wort[len] ist ein char*
    Das sind sehr verschiedene Dinge, aber das hat dir der Compiler ja gesagt.


Log in to reply