#include #include static const size_t LETTERS = 26; void permutations(char *str, size_t idx, size_t size, char *letters) { if (idx == size) { printf("%s\n", str); return; } for (size_t i = 0; i < LETTERS; i++) { if (!letters[i]) continue; str[idx] = i + 'a'; letters[i]--; permutations(str, idx + 1, size, letters); letters[i]++; } } void permutation(const char *str) { size_t size = strlen(str); char result[size + 1]; result[size] = '\0'; static char letters[LETTERS]; //memset(letters, 0, sizeof(letters)); for (size_t i = 0; i < size; i++) { letters[str[i] - 'a']++; } permutations(result, 0, size, letters); } int main() { const char *str = "abc"; permutation(str); }