Permutationen von array

....wenn du nicht mehr willst dann, muss du ab jetzt nicht mehr antworten!
Hey, danke!

Dein Programm ist genial(habs in einem seperaten Projekt getestet)!
Hey, danke!

Ich habe allerdings noch immer Probleme mit dem array, meine for-Schleife ist auch nicht unbedingt hilfreich!
Hey, d... ;)

Dein Problem ist wahrscheinlich einfach ein verrutschter Index. Schau mal deine do-Schleife an:
Code:
        int p=0;
       //...
        do
        {
                p++;
                cout<<"Person "<<p<<": ";
                cin>>person[p];
        }
        while(person[p]!="x");
Der erste Eintrag von person, der zugewiesen wird, ist person[1], und nicht person[0], was der erste Eintrag des Arrays ist. Dasselbe gilt später auch für z. Du greifst dann jedoch durch z.B.
Code:
std::sort( z, z+(p-1));
auf z[0], zu, was aber nicht initialisiert ist. (z ist der Zeiger auf z[0]) Es würde vermutlich funktionieren mit
Code:
std::sort( z+1, z+p+1);

Überprüf mal die von dir verwendeten Indizes. Bei C und C++ beginnen Arrays mit dem Index 0, nicht 1!

Die sort- und next_permutation-Algorithmen erwarten (wie eigentlich alle Algorithmen, die mit Sequenzen arbeiten) als Parameter zur Kennzeichnung der Sequenz einen Beginn-Iterator und einen End-Iterator. In deinem Fall ist das der Zeiger auf das erste Element bzw. der Zeiger hinter das letzte Element. std::string liefert diese "Zeiger" mit begin() und end(). Bei Arrays der Länge n ist es normalerweise a und a+n.
 
Dein Problem ist wahrscheinlich einfach ein verrutschter Index.
Leider nicht, damit hatte ich zuvor auch ein wenig herum experimentiert, ohne Erfolg! Also Ergebnis bekomme ich immernoch "Datenmüll", und zwar mehrfach!

Gruß
grec
 
Ich erhalte folgende Ausgabe bei der sort() -Funktion, wenn ich sie wie beschrieben in die for-Schleife setze! Die Eingabe ist oben erkenntlich!

Code:
Person 1: b
Person 2: c
Person 3: a
Person 4: x

// Ausgabe: 
2sortiert (Permutation 0): 0012FDDC   // jeweils die Zahl vor 
3sortiert (Permutation 0): 0012FDDC   // "sortiert" ist die Ausgabe 
1sortiert (Permutation 0): 0012FDDC   // von z[b]
 
So, kaum zu glauben, aber ich hab jetzt meine Permutationen gebildet! Ich habe meinen integer-array mit Hilfe von einem StringStream in einen string umgewandelt und dann die ursprüngliche Funktionen benutzt!
Also bis jetzt funktioniert alles, falls es nochmal zu Problemen kommt, melde ich mich natürlich wieder ;)

1000Dank @Kachelator, wenn du nicht gewesen wärst......ich hoffe ich habe dich nicht zu sehr strapaziert.....

Jetzt ist es gleich 3 Uhr morgens! Ich glaube ich werde hier noch zum Informatiker :-)

Grüße
grec
 
Hmmm, das ging wohl in die falsche Richtung! Ich habe nur an den nächsten Schritt gedacht und den übernächsten außer Acht gelassen! Das ist fast so, als ob ich mir ein Computer-Spiel kaufe, welches es nur in Japan und in den USA gibt, und ich fliege heute nach Japan, obwohl ich morgen sowieso in die USA muss :)

Also wie gesagt, ich habe die Permutationen gebildet, die jetzt aus string's bestehen! Am Anfang hatte ich aber folgendes angekündigt:
WICHTIG: Ich muss danach einzelne Permutationen mittels if-Anweisung ansprechen können!
Beispiel, wie ich eine Bedingung in Quelltext umwandeln muss:
"Gebe nur Permutationen aus, wenn die "1" und die "3" nicht nebeneinander stehn"! Dafür muss ich wohl wieder mit arrays arbeiten, oder? :mad:
Irgendwelche Vorschläge?

Gruß
grec
 
Was hindert dich daran, die von next_permutation() generierten Permutationen zu überprüfen und je nachdem entweder zu verwenden oder zu verwerfen? :confused: :confused: :confused:
 
Ja die Frage ist, wie ich die von next_permutation() generierten string-Permutationen überprüfen kann

Falls es sich bei den Permutationen um array's handeln würde, könne ich ja sowas machen:

Code:
if( z[b] != z[b+1] && z[b] != z[b-1] )
{
    cout<<"Permutation "<<++permutation<<": "<<z<<endl;
}

Aber wenn die Permutationen keine array's sind, weiß ich nicht, wie ich den Inhalt der Permutationen überprüfen soll!

Gruß
grec
 
Zurück