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::sortstd::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
akariYo 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...
DankewNw
-
hehe ^^