Permutation
-
Guten Morgen,
ich hätte eine Frage bezüglich Permutation.
Aus Langeweile hatte ich gerade was versucht, doch dann hab ich gedacht "Hmm...".
Erstmal der Code:#include <iostream> #include <algorithm> #include <vector> #include <fstream> int main() { std::string name = "peter"; std::vector<std::string> all_names; std::ofstream datei("Peter.txt"); do { std::next_permutation(name.begin(), name.end()); all_names.push_back(name); } while(name != "peter"); for(int i = 0; i < all_names.size(); i++) { datei << all_names[i] << std::endl; } datei.close(); }So damit kann ich peter in allen Schreibformen herausbekommen. Jetzt möchte ich aber noch, dass es nicht nur klein bleibt, sondern statt das dieser Code nur
peter
petre
perte
...macht, soll er auch das hier können:
peter
petre
perte
...
Peter
PeteR
PetRe
...
PeTER
PeTRE
...Ich denke ich müsste mit toupper arbeiten, aber ich wüsste nicht wie.
Hat jemand einen Ansatz oder Code?mfg
-
Idee für einen Algorithmus:
ersetzte ggfs. alle Großbuchstaben im Eingabestring durch Kleinbuchstaben size_t len = Länge Eingabestring; for (i = 0; i <= len; ++i) { erzeuge einen String der Länge len mit i '1'en am Anfang und fülle ggfs. den Rest mit '0'en auf; mit allen Permutationen dieses Strings gehe auf den kleingeschriebenen Originalstring los und setze alle Stellen, wo eine '1' steht den Großbuchstaben ein; diesen String setzte Deinem bisherigen Algorithmus vor; }Der erste Durchlauf hätte nur '0'en im String und würde demzufolge alles mit Kleinbuchstaben bringen, der letzte hat nur '1'en im String und bringt dann alle Permutionen in Großbuchstaben.
-
Okay danke, ich werde mal schauen.