2015-02-04 3 views
-6

Я ищу только печать Уникальная перестановка. Функция, которая должна принимать одну строку в качестве входных данных и распечатывать уникальные перестановки (без повторения) этой строки в лексикографическом (в алфавитном порядке) порядке.Печать Уникальная перестановка в C++

это то, что у меня есть до сих пор, но когда я запустил, это дало мне ошибку. Я думаю, что мои параметры в printPermutations не соответствуют основной функции, но я не могу изменить основную функцию, потому что она была дана для проверки кода.

void printPermutations(string word, int currentIndex, int wordSize){ 

if(currentIndex == wordSize){ 
    cout << word << endl; 
    return; 
} 
else{ 
    for (int j = currentIndex; j = wordSize; j++){ 
     swap(word[currentIndex], word[j]); 
     printPermutations(word, currentIndex +1, wordSize); 
     swap(word[currentIndex], word[j]); 
    } 
} 

} 

int main(int argc, char* argv[]){ 
string word = "abcd"; 
printPermutations(argv[1]); 
return 0; 
} 
+1

И ...........? –

+0

Если вы ищете, как печатать все перестановки, для этого требуется 3 строки кода на C++. – PaulMcKenzie

+0

Я ищу только печать Уникальная перестановка. Функция, которая должна принимать одну строку в качестве входных данных и распечатывать уникальные перестановки (без повторения) этой строки в лексикографическом (в алфавитном порядке) порядке. –

ответ

0

Как было довольно едко определили, что вы ищете next_permutation Вы могли бы сделать что-то вроде этого:

void printPermutations(const string& word){ 
    sort(word.begin(), word.end()); 

    cout << "1. " << word << endl; 

    for(int i = 2; next_permutation(word.begin(), word.end()); ++i){ 
     cout << i << ". " << word << endl; 
    } 
} 
Смежные вопросы