Mehrere Strings zusammensetzen



  • Hallo

    das ist nicht verwunderlich und ist von CStoll auch schon angemerkt worden

    CStoll schrieb:

    (allerdings solltest du darauf achten, daß dein vector<> am Beginn der while()-Schleife sortiert ist, sonst verpasst du die Hälfte der möglichen Ausgabe)

    Du must vor der Permutation darauf achten, das die Elemente aufsteigend sortiert sind, um wirklich alle Permutationsmöglichkeiten zu bekommen.
    Dazu verwendest du einfach std::sort

    std::vector<AnsiString> strings; // dynamisches Arra für die Strings
      strings.push_back(Edit1->Text);
      strings.push_back(Edit2->Text);
      strings.push_back(Edit3->Text);
      strings.push_back(Edit4->Text);
      strings.push_back(Edit5->Text);
      strings.push_back(Edit6->Text);
      strings.push_back(Edit7->Text);
      strings.push_back(Edit8->Text);
      strings.push_back(Edit9->Text);
    
      std::sort(strings.begin(), strings.end()); // Sortieren
    
      bool permut = true; // Ob es eine weitere Kombination gibt
      int count = 1; // Anzahl der Kombinationen
      AnsiString Buffer; // Zwischenspeicher für Ausgabe
      TStringList* list = new TStringList; // Liste, die im Hintergrund alle Kombinationen aufnimmt
    
      // Schleife zum Abarbeiten jeder einzeln möglicher Kombination
      while(permut)
      {
    
        // Ausgabe der aktuellen Kombination
        Buffer = "(" + IntToStr(count) + ") ";
        for (std::size_t lv = 0; lv < strings.size(); ++lv)
          Buffer += " " + strings[lv];
        list->Add(Buffer);
    
        // Nächste Kombination bestimmen, wenn möglich
        permut = std::next_permutation(strings.begin(), strings.end());
        Label1->Caption = IntToStr(count);
        ++count;
      }
      list->SaveToFile("Permut.txt");
      delete list;
    

    bis bald
    akari



  • Nur so aus Interesse: Wenn ich 5 Objekte A,B,C,D,E habe, dann gibt es doch 5! Möglichkeiten, oder lieg ich da falsch? (5!=5*4*3*2*1=120)

    mfg cb



  • Hallo

    ja wenn du 5 verschiedene Elemente hats, kommen in der Tat durch den von mir verwendeten Algo dann 120 Kombinationen heraus.

    bis bald
    akari



  • @akari: danke funzt super 😃 krieg ich noch irgendwie die zähling weg? also ich meine das vor jeder möglichkeit steht wievielte das ist?

    (1) abcde
    (2) abced
    (3...und so weiter

    @carstenbauer: ich meine mit möglichkeiten die 120; alle möglichen zusammensetzungen



  • Hallo

    klar bekommst du das weg. Schau dir doch an, wo das in meinem Quellcode eingebaut wird... Tip: Zähler heißt auf englich count.

    bis bald
    akari



  • akari schrieb:

    Hallo

    klar bekommst du das weg. Schau dir doch an, wo das in meinem Quellcode eingebaut wird... Tip: Zähler heißt auf englich count.

    bis bald
    akari

    Yo ist mir schon klar das es das count ist aber ich kriegs net so hin das es es immer noch im Label1 anzeigt aber nicht in der StringList
    Meiner Ergebnisse waren bisher das entweder nur ein Buchstabe in jeder Möglichkeit sthet oder gar nichts.

    So hab ich es im moment:

    Label2->Caption="1";
    std::vector<AnsiString> strings; // dynamisches Arra für die Strings 
      strings.push_back(Edit1->Text); 
      strings.push_back(Edit2->Text); 
      strings.push_back(Edit3->Text); 
      strings.push_back(Edit4->Text); 
      strings.push_back(Edit5->Text);
      strings.push_back(Edit6->Text);
      strings.push_back(Edit7->Text);
      strings.push_back(Edit8->Text);
      strings.push_back(Edit9->Text);
    
      std::sort(strings.begin(), strings.end()); // Sortieren
    
      bool permut = true; // Ob es eine weitere Kombination gibt
      int count = 1; // Anzahl der Kombinationen
      AnsiString Buffer; // Zwischenspeicher für Ausgabe
      TStringList* list = new TStringList; // Liste, die im Hintergrund alle Kombinationen aufnimmt
    
      // Schleife zum Abarbeiten jeder einzeln möglicher Kombination
      while((permut)&&(Label2->Caption=="1"))
      {
        Application->ProcessMessages();
        // Ausgabe der aktuellen Kombination
        Buffer = "(" + IntToStr(count) + ") ";
        for (std::size_t lv = 0; lv < strings.size(); ++lv)
        Buffer += "" + =strings[lv];
        list->Add(Buffer);
    
        // Nächste Kombination bestimmen, wenn möglich
        permut = std::next_permutation(strings.begin(), strings.end());
        Label1->Caption = IntToStr(count); 
        ++count;
        ListBox1->Items = list;
      } 
      list->SaveToFile("Permut.txt"); 
      delete list;
    


  • Hallo

    ...
      Buffer = ""; // Den Zähler nicht vor die Kombinationen schreiben
      for (std::size_t lv = 0; lv < strings.size(); ++lv)
        Buffer += "" + =strings[lv];
      list->Add(Buffer);
      ...
    

    bis bald
    akari



  • ^^ danke (besonders an akari) hab jetzt alles was ich brauche

    mfg Nööb



  • Trotzdem denke ich immernoch, dass du Grundlegende Tutorials nötig hast 🙂

    mfg cb

    PS: Das mit den Möglichkeiten war einfach nur eine Interessensfrage. Also keine Kritik an akari's Algo oder irgendwie eine Nachfrage was der OP unter Möglichkeiten versteht 🙂



  • carstenbauer schrieb:

    Trotzdem denke ich immernoch, dass du Grundlegende Tutorials nötig hast 🙂

    mfg cb

    PS: Das mit den Möglichkeiten war einfach nur eine Interessensfrage. Also keine Kritik an akari's Algo oder irgendwie eine Nachfrage was der OP unter Möglichkeiten versteht 🙂

    Yo werd ich mit no ma angucken ^^

    mfg Nööb



  • es ist ein weiteres Problem aufgetreten:
    wenn in den ´9 Strings 2 davon identisch sind rechnet er nicht alle möglichkeiten aus ich glaube das programm wertet es als 1 Buchstabe?
    Bitte um hilfe 😞



  • Hallo

    nein das Programm arbeitet auch bei mehrfachen Elementen korrekt. Es ist ja auch korrekt, das sich bei mehrfachen Elementen die Anzahl der möglichen Kombinationen verringert

    Beispiel mit 3 je unterschiedlichen Elementen :

    (1)  Test 1 Test 2 Test 3
    (2)  Test 1 Test 3 Test 2
    (3)  Test 2 Test 1 Test 3
    (4)  Test 2 Test 3 Test 1
    (5)  Test 3 Test 1 Test 2
    (6)  Test 3 Test 2 Test 1
    

    Beispiel mit 3 Elementen, davon 2 gleich

    (1)  Test 1 Test 2 Test 2
    (2)  Test 2 Test 1 Test 2
    (3)  Test 2 Test 2 Test 1
    

    Oder siehst du bei letztem Bespiel noch eine weitere nichtgleiche Kombination?

    bis bald
    akari



  • stimmt auch wieder ^^ ok thx



  • @Nööb
    Mal ehrlich:
    Du brauchst das ganze für diese Quizsendungen auf 9Live, oder? 🙂
    Hab mir auch schon Gedanken darüber gemacht, ein Programm dafür zu schreiben.
    Jetzt dürfte es kein Problem mehr sein...
    Danke

    wNw



  • hehe ^^


Anmelden zum Antworten