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.


Anmelden zum Antworten