In C++ the Standard Template Library provides us with std::next_permutation to easily implement this.
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string.h>
int main()
{
char str[] = "abcd";
const size_t len = strlen( str );
do
{
std::copy( str,
str + len,
std::ostream_iterator<char>( std::cout ) );
std::cout << std::endl;
}
while ( std::next_permutation( str, str + len ) );
return 0;
}
Giving the following output:
The C# / .NET framework does not have an equivalent for std::next_permutation, but is straightforward enough to implement:
This following StackOverflow post gives an excellent C# implementation of next_permutation, which I’ve used here:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace permutations_cs
{
class Program
{
static bool next_permutation<T>(IList<T> a) where T : IComparable
{
if (a.Count < 2) return false;
var k = a.Count - 2;
while (k >= 0 && a[k].CompareTo(a[k + 1]) >= 0) k--;
if (k < 0) return false;
var l = a.Count - 1;
while (l > k && a[l].CompareTo(a[k]) <= 0) l--;
var tmp = a[k];
a[k] = a[l];
a[l] = tmp;
var i = k + 1;
var j = a.Count - 1;
while (i < j)
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
return true;
}
static void Main(string[] args)
{
char[] str = { 'a', 'b', 'c', 'd' };
do
{
Console.WriteLine(str);
}
while ( next_permutation( str ) );
}
}
}
Giving an identical output:

