2016-04-19 2 views
1

Я пытаюсь выяснить, как создать список слов в C++ на основе строки символов данных (аналогично тому, как crunch wordlist работ)Генерация списка слов в C++

Я довольно новый для C++ и только получил программа, чтобы отображать символы с одного за раз.

Я искал в сети довольно долгое время, не так много, кроме поиска O (n^2), не очень понимая, как реализовать его в программе.

Код:

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; 
} 

Результат:

a 
b 
c 
d 
e 

Wanted Результат: http://pastebin.com/tgyUtKfA

Отрывок результата:

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 

(Окончательный результат следует, что рисунок вниз «EEEEE»)

+0

Pastebin заблокирован на работе - которая хорошо иллюстрирует, почему мы требуем вопросы, чтобы быть самодостаточным. Вставьте желаемый результат в вопрос. (Если он очень большой, пожалуйста, обрезайте количество входов, чтобы получить более разумный желаемый результат.) – BoBTFish

+0

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

+2

@BoBTFish Я просмотрел список. Это просто перестановка всех возможных буквенных комбинаций заданных букв в строках от длины 1 до длины 5. – Logicrat

ответ

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; 
} 

жить: http://melpon.org/wandbox/permlink/gGVAxbVUFVZs4fUR

+0

для (letter = 'a' .. 'z') ожидает ';' до 'z'? –

+0

Теперь со 100% реальным кодом. Однако есть много жира, так как такие струны довольно неэффективны. – xaxxon

+0

Im получение 'emplace_back' не разрешен. Любая идея почему? –

Смежные вопросы