01: #include <iostream>
02: #include <string>
03: #include <vector>
05: using namespace std;
07: /**
08: Computes n!
09: @param n a nonnegative integer
10: @return n! = 1 * 2 * 3 * . . . * n
11: */
12: int factorial(int n)
13: { if (n == 0) return 1;
15: int smaller_factorial = factorial(n - 1);
16: int result = smaller_factoria * n;
17: return result;
18: }
20: /**
21: Generates all permutations of the characters in a string
22: @param word a string
23: @return a vector that is filled with all permutations
24: of the word
25: */
26: vector<string> generate_permutations(string word)
27: { vector<string> result;
29: if (word.length() == 1)
30: { result.push_back(word);
32: return result;
33: }
34:
35: for (int i = 0; i < word.length(); i++)
36: { string shorter_word = word.substr(0, i)
38: + word.substr(i + 1, word.length() - i - 1);
39: vector<string> shorter_permutations
40: = generate_permutations(shorter_word);
41: for (int j = 0; j < shorter_permutations.size(); j++)
42: { string longer_word = word[i] + shorter_permutations[j];
44: result.push_back(longer_word);
45: }
46: }
47: return result;
48: }
49:
50: int main()
51: { cout << "Enter a string: ";
53: string input;
54: getline(cin, input);
55: cout << "There are " << factorial(input.length())
56: << "permutations.\n";
57: vector<string> v = generate_permutations(input);
58: for (int i = 0; i < v.size(); i++)
59: cout << v[i] << endl;
60: return 0;
61: }