Suche Algorithmus

  • Suche Algorithmus

    Hallo ich habe eine Datei in der folgendes steht (alles hintereinander nur zur besseren anschauung umformatiert)

    Quellcode

    1. ## Xs1000;Ys1000;EA0!
    2. // Nr1;xP11;yP12;Tp0;AE0;BzE_1;TD0;PnE_1;NE00000000;NA00000000!
    3. // Nr2;xP11;yP21;Tp0;AE0;BzE_2;TD0;PnE_2;NE00000000;NA00000000!
    4. // Nr3;xP22;yP11;Tp6;AE2;Bz;TD0;PnAND;NE00000000;NA00000000!
    5. // Nr4;xP20;yP40;Tp6;AE2;Bz;TD0;PnAND;NE00000000;NA00000000!
    6. // Nr5;xP11;yP41;Tp0;AE0;BzE_3;TD0;PnE_3;NE00000000;NA00000000!
    7. // Nr6;xP12;yP50;Tp0;AE0;BzE_4;TD0;PnE_4;NE00000000;NA00000000!
    8. // Nr7;xP32;yP24;Tp8;AE2;Bz;TD0;PnXOR;NE00000000;NA00000000!
    9. // Nr8;xP46;yP29;Tp1;AE1;BzA_1;TD0;PnA_1;NE00000000;NA00000000!
    10. || Nr1;AP2;vBYA6;bBXB4;PV0! ''19,52;20,50;!
    11. || Nr2;AP2;vBYA5;bBXA4;PV0! ''18,43;20,44;!
    12. || Nr3;AP2;vBYA2;bBXB3;PV0! ''18,23;22,21;!
    13. || Nr4;AP2;vBYA1;bBXA3;PV0! ''18,14;22,15;!
    14. || Nr5;AP2;vBYA3;bBXA7;PV0! ''29,18;32,28;!
    15. || Nr6;AP2;vBYA4;bBXB7;PV0! ''27,47;32,34;!
    16. || Nr7;AP2;vBYA7;bBXA8;PV0! ''39,31;46,31;!
    Alles anzeigen


    zur Zeit lese ich die Zeile Segmentweise aus und gebe diese Informationen in einen Puffer dies habe ich so realisiert

    Quellcode

    1. // Segmentweise die Daten ausschneiden
    2. while(Segmentausschneiden(Hauptpuffer,puffer2))
    3. {
    4. // Zuerst unterscheiden, um welchen Abschnitt es sich handelt
    5. AktuellerSegmentTyp = keinen;
    6. if (SucheString(&puffer2[0],TEXT("##"),&WertPos))
    7. AktuellerSegmentTyp = Infodaten;
    8. if (SucheString(&puffer2[0],TEXT("//"),&WertPos))
    9. AktuellerSegmentTyp = Blockdaten;
    10. if (SucheString(&puffer2[0],TEXT("||"),&WertPos))
    11. AktuellerSegmentTyp = Verbindung;
    12. if (SucheString(&puffer2[0],TEXT("''"),&WertPos))
    13. AktuellerSegmentTyp = Verbindungspunkte;
    14. switch (AktuellerSegmentTyp)
    15. {
    Alles anzeigen


    Nun folgenden Problem ich möchte Wissen Wie oft PnE_x und wie oft PnA_x vorkommt.
    In diesen Bsp 4*PnE_x und 1xPnA_x.
    (PnE_1...Pne_x sind eingänge und PnA_1....PnA_X Anzahl der Ausgänge)

    Wie kann ich es schaffen das mir wie in diesen Bsp.: 4 Eingänge und 1 Ausgang vorhanden ist. (ausgegeben wird)

    Hoffe ihr könnt mir helfen
    Gruß Holzverleih
  • In etwa so.

    Falls du nur zählen willst kannst du natürlich den Vergleich gleich in die Schleife schreiben und dir den Vektor und das count_if spaaren ;)

    Quellcode

    1. ifstream file("filename");
    2. std::string buffer;
    3. std::getline(file, buffer);
    4. struct pne
    5. {
    6. bool operator()(const std::string val) {return (val.substr(0, 3) == "PnE");}
    7. };
    8. struct pna
    9. {
    10. bool operator()(const std::string val) {return (val.substr(0, 3) == "PnA");}
    11. };
    12. if (buffer[0] == '/' && buffer[1] == '/')
    13. {
    14. std::string::size_type pos = buffer.find(';');
    15. std::vector<std::string> results;
    16. while (pos != std::string::npos)
    17. {
    18. results.push_back(buffer.substr(0, pos));
    19. buffer = buffer.substr(pos+1);
    20. pos = buffer.find(';');
    21. }
    22. std::size_t pnas = std::count_if(results.begin(), results.end(), pna());
    23. std::size_t pnes = std::count_if(results.begin(), results.end(), pne());
    24. }
    Alles anzeigen


    Quellcode

    1. ifstream file("filename");
    2. std::string buffer;
    3. std::getline(file, buffer);
    4. unsigned pnes;
    5. unsigned pnas;
    6. if (buffer[0] == '/' && buffer[1] == '/')
    7. {
    8. std::string::size_type pos = buffer.find(';');
    9. while (pos != std::string::npos)
    10. {
    11. if (buffer.substr(0, pos) == "PnE") ++pnes;
    12. if (buffer.substr(0, pos) == "PnA") ++pnas;
    13. buffer = buffer.substr(pos+1);
    14. pos = buffer.find(';');
    15. }
    16. }
    Alles anzeigen
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)