Announcement

Collapse
No announcement yet.

Suchschleife für Profis

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Suchschleife für Profis

    hallo,
    Ich möchte eine Suchschleife in meinem Programm einbauen,
    die alle "nicht gefundene Einträge" liefert.
    (Da die Anzahl der gefundenen Einträge in Arrayfeld1[i]
    viel mehr als die "nicht-gefundenen" sind. );
    Z.B
    Ich habe zwei For-Schleifen eingebaut:
    (Ich programmiere hauptsächlich in Visual Basic. In C wird es ungefär so aussehen)
    ende=10000
    ende1=7000

    For (J=0 to J=ende J++)
    {For i=0 to i=ende1 i++)
    {if Arrayfeld1[i]==Arrayfeld2[j]
    // tue gar nicht!
    else
    // liefere den Eintrag
    }//Forend
    }//Forende

    Das Problem in dieser Schleife ist folgendes,
    Es werden 10000*7000 Elememte als nicht gefunden
    zurückgegeben!!
    Hat jemand eine Idee?
    Ich danke für jeden Hinbweis!

  • #2
    Hallo Henry,<BR><BR>
    also wenn es sich um Zeichenketten handelt, musst Du in C die Funktion strcmp() zum Vergleich hernehmen, ansonsten vergleichst Du nur die Speicheradressen Deiner Zeichenketten, und die sind natürlich alle verschieden. Der Rest deines Beispiels ist mit Sicherheit nur exemplarisch; Wenn nicht, sollte man da auch nochmal drüber reden ;-) <BR><BR>
    Gruss Armi

    Comment


    • #3
      Hi, <p>
      Vielleicht machst du folgendes (good old C):<br>
      1 Button auf Maske und 1 RichEdit Feld auf Maske:
      <pre>
      void __fastcall TForm1::Button1Click(TObject *Sender)
      {
      int Array1[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,NULL};
      int Array2[] = {1,2,4,5,6,8,9,11,12,13,14,NULL};
      int i = 0;
      while (Array1[i]){
      bool found = false;
      int a = 0;
      while (Array2[a]){
      if (Array2[a] == Array1[i]){
      found = true;
      break;
      }
      a++;
      }
      if (!found) RichEdit1-&gt;Lines-&gt;Add(IntToStr(Array1[i]) + " micht gefunden");
      ++i;
      }
      }
      </pre>
      Ansonsten kannst Du die Werte auch noch in eine map oder einen Vector stellen (je nachdem, ob du Duplikate ausschliessen moechtest, oder nicht - beide stehen aber nur bei C++ zur Verfuegung), diese sortieren, falls die Werte unsortiert sind, und die dann ausschliessen.
      <pre>
      #include <vector.h>

      void __fastcall TForm1::Button1Click(TObject *Sender)
      {
      vector <int> v1;
      vector <int> v2;

      // Vectoren fuellen
      for (unsigned int i=0;i&lt;100;i++)
      v1.push_back(i);
      for (unsigned int i=2;i&lt;100;i++)
      v2.push_back(i);

      // Daten suchen
      for (unsigned int i=0;i&lt;v1.size();i++){
      if (find(v2.begin(),v2.end(),v1[i]) == v2.end())
      RichEdit1-&gt;Lines-&gt;Add(IntToStr(v1[i]) + " nicht gefunden");
      }
      }

      Der C++ ist eigentlich besser, da universaler. (wenn Du anstelle von int string einsetzt, kannst Du auch strings vergleichen).<p>
      CU Chris

      </pre&gt

      Comment


      • #4
        hallo,
        danke für die Antwort auf meine Frage.
        Ich habe dazwischen eine ähnliche Lösung wie die von Chris !

        viele Gruess

        Comment

        Working...
        X