Logik problem



  • schreib den code neu, der ist nicht gut



  • Aus welchem Grund packst du überhaupt WIN32_FIND_DATA-Strukturen in einen Vector? Brauchst du irgendetwas anderes daraus als den Dateinamen?



  • re

    MFK schrieb:

    Aus welchem Grund packst du überhaupt WIN32_FIND_DATA-Strukturen in einen Vector? Brauchst du irgendetwas anderes daraus als den Dateinamen?

    ja, ich brauch fast alles von der struktur.

    [quote="ZuK]Verstehe nicht ganz die logik hinter deinen programm.[/quote]

    anfang bei vec_t[0] und vec_s[0]
    wenn der vergleichswert nicht gleich ist, dann im vertor mit dem kleineren wert um eins weiter gehen, bis die vergleichswerte gleich sind oder der vergleichswert des anderen vectors kleiner ist. wenn beide gleich sind, wert ausgeben und beide um eins weiter gehen. wieder gucken: beide gleich ? wert ausgeben, ansonsten im vector mit dem niedrigeren wert um eins weiter gehen. das solange machen bis einer der vectoren am ende angekommen sind.

    das ist meiner meinung nach der schnellste weg, wenn beide listen fast gleich gefuellt sind. koennte aber auch ueber eine binaere suche ganz gut gehen. will ich aber in diesem fall nicht.

    tipp schrieb:

    schreib den code neu, der ist nicht gut

    wieder mal eine sehr gute antwort. wenn du sowas schon schreibst, dann bitte auch mit begruendung. ansonsten lass es

    Meep Meep



  • also 3 weitere while schleifen in einer while schleife verschachelt...das ist doch so richtig übel. da muss man erstmal lange nachdenken bevor man das checkt.



  • Hallo MeepMeep,

    sollte das erste && nicht ein || sein?

    und nur so nebenbei, die iteratoren scheinen ein wenig
    falsch deklariert.... 😉

    jenz



  • jenz schrieb:

    Hallo MeepMeep,

    sollte das erste && nicht ein || sein?

    und nur so nebenbei, die iteratoren scheinen ein wenig
    falsch deklariert.... 😉

    jenz

    ups. jo stimmt. liegt aber daran das ich das nicht kopiert sondern reingetippt hatte. sollte natuerlich

    std::vector<WIN32_FIND_DATA>::iterator it_s;
    std::vector<WIN32_FIND_DATA>::iterator it_t;
    

    heissen.

    das erste && stimmt schon, weil er soll das ja solange machen, solange die iteratoren nicht das ende ihres vectors erreicht haben

    ich hab das jetz mal umgeschrieben , weil der code ja nicht gut ist.

    while(it_s != vec_s.end() && it_t != vec_t.end())
       {
          result = strcmp(it_s->cFileName, it_t->cFileName);
          if(result)
          {
             if(result < 0)
                ++it_s;
             else
                ++it_t;
          }
          else
          {
             Memo1->Lines->Add(it_t->cFileName);
             ++it_s;
             ++it_t;
          }
       }
    

    das gleiche ergebnis.
    wo liegt da nur mein denkfehler *gruebel

    Meep Meep



  • ich habe es mal ausprobiert und die
    vectoren mit eigenen daten gefüllt.
    sieht doch gut aus.
    was ist denn deine eingabe und ausgabe?



  • re

    hab 2 mal den gleichen ordner eingelesen.

    erster ordner mit maskierung *.obj

    FileData.obj
    FileHelper.obj
    main.obj
    NetSync.obj
    StreamHelper.obj
    TxlAlgo.obj
    

    und den zweiten mit .

    Directory.cpp
    Directory.h
    Directory.~cpp
    Directory.~h
    FileData.cpp
    FileData.h
    FileData.obj
    FileData.~cpp
    FileData.~h
    FileHelper.cpp
    FileHelper.h
    FileHelper.obj
    FileHelper.~cpp
    FileHelper.~h
    main.cpp
    main.ddp
    main.dfm
    main.h
    main.obj
    main.~cpp
    main.~ddp
    main.~dfm
    main.~h
    Message.html
    Message1.html
    NetSync.bpr
    NetSync.cpp
    NetSync.obj
    NetSync.res
    NetSync.tds
    NetSync.~bpr
    NetSync.~cpp
    StreamHelper.cpp
    StreamHelper.h
    StreamHelper.obj
    StreamHelper.~cpp
    StreamHelper.~h
    TxlAlgo.cpp
    TxlAlgo.h
    TxlAlgo.obj
    TxlAlgo.~cpp
    TxlAlgo.~h
    

    die beiden vectoren lass ich mir auch im programm ausgeben, damit ich auch bestimmt weiß, das die obj-files in beiden vectoren enthalten sind

    ausgabe ist dann in beiden versionen:

    FileData.obj
    FileHelper.obj
    main.obj
    

    Meep Meep



  • ah, ich habs.

    du vergleichst zwischendurch groß- mit kleinbuchstaben.
    strcmp hält da die einen immer für kleiner als die anderen.

    ob das so richtig ist weiß ich nicht, bei mir funzt es aber, wenn ich
    alles uppercase vergleiche

    jenz



  • ja das wars. so ein bloeder fehler.

    dank dir

    Meep Meep


Anmelden zum Antworten