Mehrere Strings zusammensetzen
-
uff ^^ erst mal danke für die antwort aus der ich leider nicht ganz schlau werde ^^
ich kenne mich nicht mit sowas auswenns net zuviel verlangt ist könntest du mir ein beispiel schreiben? ^^
mfg da nööb
-
Hallo
#include <vector> #include <algorithm> ... std::vector<AnsiString> strings; // dynamisches Arra für die Strings for (int lv = 1; lv < 7; ++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 // 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]; ListBox1->Items->Add(Buffer); // Nächste Kombination bestimmen, wenn möglich permut = std::next_permutation(strings.begin(), strings.end()); ++count; }
natürlich kannst du das was next_permutation auchselber schreiben...
bis bald
akari
-
danke erst mal
aber wo kommen da die 9 Strings vor?
falls es jetzt ne blöde frage ist: Bin' Nööb ^^
-
Hallo
for (int lv = 1; lv < 7; ++lv) strings.push_back(IntToStr(lv)); // Array füllen
Ich habe nur 7 genommen, und dann auch nur als einfache Zahlen von 1 bis 7.
Ist aber egal, was du in den vector füllst. Es wird lexigrafisch sortiert.
Must nur aufpassen... so ab 10 Elementen dauert das ganze schon sehr lange...bis bald
akari
-
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