2016-04-19 11 views
1

ich herauszufinden versuche, wie eine Wortliste in C++ auf Basis von Zeichen auf einer Schnur erzeugen gegeben (ähnlich wie crunch wordlist works)Generieren einer Wortliste in C++

ich ziemlich bin neu in C++ und haben nur bekommen das Programm, um die Zeichen einzeln nacheinander aufzulisten.

Ich habe online seit einiger Zeit mit nicht viel Glück anders als das Finden von O (n^2) mit nicht viel Idee auf, wie man es zum Programm einführt.

Code:

int main() { 
    string characters = "abcde"; 

    int length = 5; 
    string word = ""; 
    for(int i = word.length(); i <= length; i++) { 
     for(int l = 0; l < characters.length(); l++) { 
      word += characters[l]; 
      cout << word << "\n"; 
     } 
    } 
    return 0; 
} 

Ergebnis:

a 
b 
c 
d 
e 

Gewünschtes Ergebnis: http://pastebin.com/tgyUtKfA

Snippet Ergebnis:

a 
b 
c 
d 
e 
aa 
ab 
ac 
ad 
ae 
ba 
bb 
bc 
bd 
be 
ca 
cb 
cc 
cd 
ce 
da 
db 
dc 
dd 
de 
ea 
eb 
ec 
ed 
ee 
aaa 

(Das Endergebnis ergibt sich, dass Muster nach unten zu „eeeee“)

+0

Pastebin bei der Arbeit blockiert ist - was schön macht deutlich, warum wir Fragen erfordern umluftunabhängigem zu sein. Bitte fügen Sie das gewünschte Ergebnis in die Frage ein. (Wenn es sehr groß ist, reduzieren Sie bitte die Anzahl der Eingänge, um eine vernünftigere gewünschte Ausgabe zu erhalten.) – BoBTFish

+0

https://en.wikipedia.org/wiki/Backtracking – Raxvan

+2

@BoBTFish Ich schaute auf die Liste. Es ist einfach eine Permutation aller möglichen Buchstabenkombinationen der gegebenen Buchstaben in Strings von Länge 1 bis Länge 5. – Logicrat

Antwort

0
#include <string> 
#include <vector> 
#include <iostream> 
using namespace std; 

vector<string> make_permutations(int length) { 
    if (length == 0) { 
    return vector<string>{}; 
    } 
    vector<string> results; 
    vector<string> children = make_permutations(length - 1); 
    for (char letter = 'a'; letter <= 'z'; letter++) { 
    results.emplace_back(1, letter); 
    for(auto child : children) { 
     results.push_back(std::string(1, letter) + child); 
    } 
    } 
    return results; 
} 

int main() 
{ 
auto results = make_permutations(2); 
    for(auto s : results) cout << s << endl; 
} 

Live: http://melpon.org/wandbox/permlink/gGVAxbVUFVZs4fUR

+0

für (Buchstabe = 'a' .. 'z') erwartet ';' vor 'z'? –

+0

Jetzt mit 100% echtem Code. Es gibt jedoch viel Fett, da solche Saiten ziemlich ineffizient sind. – xaxxon

+0

Ich bekomme 'emplace_back' nicht gelöst. Irgendeine Idee warum? –