[Geloest] Wie parse ich am besten folgenden Inhalt..



  • Beispiel:
    Ich habe eine .txt datei die eine Liste von Begriffen enthaelt. z.B.

    Banane
    Apfel
    Erdbeere
    Kirsche
    Melone
    Kiwi
    Scharlotte
    Gurke
    Brokkoli
    Spinat
    Kartoffel
    Bohne
    Hammer
    Meissel

    Diese lese ich ein und pruefe ob bestimmte Eintraege vorhanden sind. Dazu hab ich ein Array angelegt:

    char* array_a[] = { "kirsche", "erbse", "papaya", "gurke", "hammer" };

    und ueberpruefe das ganze via for Schleife und gebe die Uebereinstimmungen aus. Diese waeren in dem Fall Kirsche, Gurke und Hammer. Nun moechte ich aber nicht so genau bleiben und nur die Oberkategorie, hier Obst und/oder Gemuese
    und/oder Werkzeug ausgeben.

    Nun die Frage aller Fragen: Wie setzte ich dies am besten um?

    Ist es moeglich "Kirsche", "Erbse", "Papaya", "Gurke" und "Hammer" noch einen zweiten Wert zuzuweisen (z.B. 0,1,2 etc.) auf den ich fuer diesen Zweck zurueckgreifen kann?

    Ist nur ein (ziemlich sinnfreies) Beispiel.. also macht euch deswegen keinen Kopf. Nehmt einfach an es gaebe noch mehr Kategorien als Obst, Gemuese und Wekzeug und die Liste variiert jedes mal sehr stark und ich moechte den groben Inhalt dieser bestimmen.

    Gruss context



  • Wenn die Elemente mehr Informationen besitzen sollen, muss du einen neuen Datentyp benutzen. Das Schluesselwort lautet hier class bzw. struct.



  • Danke sehr, ich werde es mir zu Gemuete fuehren.



  • Nimm zum Parsen von irgend welchen Sachen:
    #include <vector> oder <deque>
    und natürlich <string>



  • Oder gleich Boost.Spirit 😃



  • 314159265358979 schrieb:

    Oder gleich Boost.Spirit 😃

    Sehr witzig... wenn du das kennen würdest, lachst du nicht mehr so.

    Hilf ihm lieber mit konstruktiven Tipps wie: nimm eine std::map dafür.



  • 😑 schrieb:

    Sehr witzig... wenn du das kennen würdest, lachst du nicht mehr so.

    Ist jetzt auch nicht so schwer. Mit den Tutorials zu Spirit2 kann man schnell ne kleine Grammatik zusammenstöpseln, auch wenn man nicht jedes klitzekleine Detail verstanden hat.



  • Danke fuer eure Antworten. Ich hab mir mitlerweile "alles" angesehen und mein Problemchen mittels map geloest. Erschien mir am einfachsten . Wenn ich Zeit habe versuche ich es auch mal auf anderem Wege..



  • Das Problem bei std::map ist allerdings, dass zwischen Groß- und Kleinschreibung unterschieden wird. "Banane" ist also nicht gleich "banane", ich weiß nicht, ob das für dich relevant ist.
    Wenn das ein problem für dich ist musst du eine eigene Vergleichsfunktion/Funktionsobjekt für std::map implementieren, die nicht zwischen Groß- und Kleinschreibung unterscheidet.



  • 😑 schrieb:

    314159265358979 schrieb:

    Oder gleich Boost.Spirit 😃

    Sehr witzig... wenn du das kennen würdest, lachst du nicht mehr so.

    Hilf ihm lieber mit konstruktiven Tipps wie: nimm eine std::map dafür.

    Ich würde nicht Bosst.Spirit sagen, wenn ich es nicht kennen würde. Logik ftw.


Anmelden zum Antworten