Mehrere Strings zusammensetzen
-
Hallo
nein, ab 10 Ausgangs-elementen bricht die ListBox zusammen.
machs lieber so :std::vector<AnsiString> strings; // dynamisches Arra für die Strings for (int lv = 1; lv < 10; ++lv) strings.push_back(IntToStr(lv)); // Array füllen 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
-
cool danke so meinte ich das
wo genau nimmt das programm die zahlen her? Es sollen nämlich eigentlich Strings sein die man in Edit-Felder eingibtmfg nööb
-
akari schrieb:
std::vector<AnsiString> strings; // dynamisches Arra für die Strings for (int lv = 1; lv < 10; ++lv) strings.push_back(IntToStr(lv)); // Array füllen
Genau daher - anstelle dieser beiden Zeilen kannst du auch die Werte von woanders holen.
(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)
-
Hallo
habe ich doch schon hier geschrieben
akari schrieb:
for (int lv = 1; lv < 7; ++lv) strings.push_back(IntToStr(lv)); // Array füllen
Du kanst dem vector auf die Eingabe-Werte aus Edit-Feldern anfügen
strings.push_back(Edit1->Text); // Fügt den Text aus Edit1 als letztes Element in den vector ein
bis bald
akari
-
ich hab jetzt
for (int lv = 1; lv < 7; ++lv) strings.push_back(Edit1->Text);
dann wird allerdings nur Edit1 verwendet also hab ich es so versucht:
for (int lv = 1; lv < 7; ++lv) strings.push_back(Edit1->Text); for (int lv = 1; lv < 7; ++lv) strings.push_back(Edit2->Text);
aber dann funktioniert es auch nicht richtig
bitte um hilfemfg Nööb
-
Hallo
du weißt aber schon, was eine For-Schleife ist und das die für eine Auswirkung hat?
bis bal
akari
-
akari schrieb:
Hallo
du weißt aber schon, was eine For-Schleife ist und das die für eine Auswirkung hat?
bis bal
akarieigentlich schon O.o aber ich blicke im moment nicht ganz durch
-
Hallo
ich habe geschrieben
strings.push_back(Edit1->Text); // Fügt den Text aus Edit1 als letztes Element in den vector ein
Das fügt also einmal den Text an das Array an.
Du schreibst
for (int lv = 1; lv < 7; ++lv) strings.push_back(Edit1->Text);
Das fügst sechsmal den jeweils gleichen Text an das Array an.
bis bald
akari
-
ähm....^^
wie is das gemeint?^^ :schäm:
-
Hallo
überleg dir doch bitte erstmal, was du überhaupt machen willst... mach einen Programm-Ablaufplan oder so. Oder fang erstmal mit den Grundlagen von C++ an.
bis bald
akari
-
Hallo,
Sei mir nicht böse, aber ich glaube nicht, dass du weißt was eine For-Schleife machst. Arbeite besser mal ein grundlegendes Tutorial durch und schau dir dann akari's Beiträge nochmal an.mfg cb
/EDIT zu spät!
-
akari schrieb:
Hallo
überleg dir doch bitte erstmal, was du überhaupt machen willst... mach einen Programm-Ablaufplan oder so. Oder fang erstmal mit den Grundlagen von C++ an.
bis bald
akaries gibt 9 edit eingabefenster wo man die 9 zeichen eingeben sollen von denen alle möglichkeiten abgespeichert werden sollen
carstenbauer schrieb:
Hallo,
Sei mir nicht böse, aber ich glaube nicht, dass du weißt was eine For-Schleife machst. Arbeite besser mal ein grundlegendes Tutorial durch und schau dir dann akari's Beiträge nochmal an.mfg cb
/EDIT zu spät!
Eine For-schleife wiederholt solange einen Vorgang bis eine Bedingung erfüllt ist in diesem fall bis die variable lv 7 erreicht hat....soweit ich weiß
-
Hallo
da du ja doch nicht auf unsere Ratschläge hören willst...
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); 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
-
Danke aber da stimmt etwas nicht.
Zum test hab ich mal folgendes gemachtstrings.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);
dann das programm gestartet und in den 5 edits a, b, c, d und e eingegeben.
das bringt 24 möglichkeiten (?)
allerdings wenn ich eingebe (in der reihenfolge) e,a,b,c,d
dann gibt es nur 6 ergebnisse die dann alle mit e beginnen Oomfg Nööb
-
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;