Inhalte zweier unterschiedlicher Klassen miteinander vergleichen (strcmp)



  • Moin!

    Folgendes problem:

    Ich befinde mich innerhalb einer Methode von Klasse B und bin dabei XML zu parsen.
    Zuvor habe ich bereits tags aus einer DTD Dateien ausgelesen und innerhalb einer Klasse gespeichert.

    Nun möchte ich schauen ob die Tags die in der XML Datei verwendet werden sich so auch in der DTD befinden.
    Ergo -> strcmp(InhaltTagsKlasseA,puffer) (oder so ähnlich...). Codemäßig sieht das grade so aus:

    for(int i=0;i<=jetzt->gibAnzahlTags();i++)
    		{
            if(strcmp(jetzt-><gibTags(i),puffer)!=0)
            {
               strcat(puffer, "-INVALIDE");
               break;
            }
            else if(strcmp(jetzt->gibTags(i),puffer)==0)
            {
               strcat(puffer, "-VALIDE");
               break;
            }
    		  }
    

    "jetzt" ist der Name des erzeugten Objektes der Klasse. Dass das so nicht funktionieren konnte war mir eig. vorher klar. Aber mir fehlt grade auch jegliche Krativität für ne Idee wie mein Vorhaben denn umsetzbar wäre...



  • Warum verwendest du nicht std::string?



  • if(strcmp(jetzt->gibTags(i),puffer)!=0)
    else if(strcmp(jetzt->gibTags(i),puffer)==0)
    

    Hier gut überlegen. 💡



  • Ich bin student und lerne erst seit 4 monaten c++. std::string haben wir bisher nicht verwendet...

    und der 2. hinweis hilft mir jetzt auch nicht wirklich 😕



  • Was ist das für ein dämlicher Kurs, wo ihr zuerst mit C-Strings arbeitet und dann später vielleicht std::string? o_O
    Der Sinn davon erschließt sich mir nicht.



  • Wird überall so gemacht... Der gescheite Weg ist eher die Ausnahme.



  • Keine Ahnung... Der Prof wird seine Gründe haben denke ich. Ist ein renommierter Mann der international recht angesehen ist.

    Aber hätte mir das denn bei meinem aktuellen Problem geholfen?!



  • Ja.


  • Mod

    Rogi schrieb:

    Keine Ahnung... Der Prof wird seine Gründe haben denke ich. Ist ein renommierter Mann der international recht angesehen ist.

    Hier wird der Grund, warum er euch C lehrt erklärt:
    http://algebratutors.org/wp-content/uploads/2010/01/algebra-cartoon15.gif



  • 314159265358979 schrieb:

    Ja.

    Und gleichzeitig hätte std::string mindestens fünf Probleme vermieden, die Rogi mit C-Strings noch haben wird.

    Eine Schleife, die im ersten Durchgang immer abbricht, ist auch äusserst sinnvoll. Genauso wie ein else if , das geradeso gut ein else sein könnte...



  • Hm, hier scheint man leider eher drauf aus zu sein auf Lehrmethoden anderer Leute rumzuhacken statt wirklich zu helfen...

    Danke trotzdem.



  • Und andernorts scheint man eher drauf aus zu sein, generelle Vorschläge kategorisch zu ignorieren und nur das zu hören, was man hören will.

    Tja, Sachen gibts...



  • Wie bereits oben geschrieben... Ich kann mit dem Hinweis leider nicht viel Anfang. Du warst auch mit meinem letzten Posting garnicht gemeint.

    Das Schleifenproblem habe ich behoben, aber ich habe noch immer keinen Zugriff auf die Tags die in der andere Klasse gespeichert sind.



  • Okay, dann war das ein Missverständnis.

    Der Grund, wieso du bisher vielleicht nicht allzu viele Antworten zu deinem eigentlichen Problem bekommen hast, besteht in der Ungenauigkeit deiner Problembeschreibung. Du redest von XML und Tags und sagst, dass es nicht funktioniert wie es sollte.

    Du teilst uns aber weder mit,

    • wie der Kontext deines Codebeispiels aussieht
    • was genau nicht funktioniert
    • was du überhaupt erreichen möchtest.

    Das wäre aber schon noch wichtig. Kannst du vielleicht auch einen Code posten, der dein Problem verdeutlicht, aber trotzdem so wenig Irrelevantes wie möglich enthält?



  • Okay. Dann versuche ich mal Problem mal zu konkretisieren:

    Ich habe eine DTD mit folgendem Inhalt aus der die Tags "person","vorname" und "famname" ausgelesen und in Objekten einer Klasse ClElement gespeichert werden.
    Anschliessend wird eine XML Datei geparsed die auch Tags enthält, welche allerdings in Objekten einer anderen Klasse (ClToken) gespeichert werden.

    Anschliessend sollen die Tags aus der XML Dtaie mit denen aus der DTD Datei vergleichen werden. Kommt ein Tag aus der XML Datei auch in der DTD vor, soll es als valide ausgezeichnet werden Kommt es in der DTD nicht vor, als invalide.

    Das soll in einer Schleife, ähnlich der oeben geposteten, passieren. Leider kriege ich jedoch keinen Zugriff auf die Tags aus der DTD Datei, da ich mich in einer Methode der Klasse der XML Datei befinde wenn dieses valide/invalide gecheckt werden soll.

    Ich hoffe so ist es deutlicher...
    Danke!



  • Warum man nicht direkt mit std::string anfängt? Weil man eventuell erstmal die Grundlagen von C lernt? Das lief bei uns genauso und das halte ich auch für die richtige Vorgehensweise.

    Den Cartoon von SeppJ finde ich dazu sehr passend. 😃

    Zum Thema: Wie liest du die DTD- bzw. XML-Datei denn erst ein?



  • RyoShinzo schrieb:

    Warum man nicht direkt mit std::string anfängt? Weil man eventuell erstmal die Grundlagen von C lernt? Das lief bei uns genauso und das halte ich auch für die richtige Vorgehensweise.

    C-Strings haben keinen Mehrwert und sind komplizierter in ihrer Verwendung. Warum also diese zuerst lernen?



  • Weil es wohl eher um allgemeine Programmierung geht als Sprachspezifische std::strings.



  • Das macht in der Form keinen Sinn. Entweder man lernt eine Sprache ordentlich, oder man lässt es bleiben.



  • HighLigerBiMBam schrieb:

    Weil es wohl eher um allgemeine Programmierung geht als Sprachspezifische std::strings.

    Das ist quasi das Antibeispiel gegen C-Strings. Wenn es um allgemeine Programmierung geht, dann sollte man sich auf die Logik konzentrieren können. In diesem Fall will man Strings darstellen. In C gibt es keine Strings. Es gibt nur Arrays aus Zeichen. Man muss recht genau wissen, wie diese zu behandeln sind (0-Terminierung, kopieren, vergleichen..., etc.). Mit einem std::string kann man so ganz allgemein Programmieren. Da ist ein String ein String, und benutzt sich, wie man es erwartet.


Anmelden zum Antworten