Best way to print all possible permutations of a string


S

sanket

Hi all.

I wrote a program to print all permutations of the letters of a
string. Here are my two implementations

1.

include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char ** argv)
{
if(argc < 2) {cout << "Usage:\na.out <string>"<<
endl;abort();}
string s(argv[1]);

for(string::iterator i = s.begin(); i != s.end(); i++)
{
for(string::iterator j = s.begin(); j != s.end(); j++)
{
if(j == i) continue;
for(string::iterator k = s.begin(); k !=
s.end(); k++)
{
if(k == j || k == i) continue;
for(string::iterator p = s.begin(); p !
= s.end(); p++)
{
if(p == k||p == j||p == i)
continue;
cout << *i << *j << *k << *p
<< endl;
}
}
}
}
}

2.

#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main(int argc, char ** argv)
{
if(argc < 2) {cout << "Usage:\na.out <string>"<<
endl;abort();}
string s(argv[1]);
sort(s.begin(), s.end());
cout << s << endl;
while(next_permutation(s.begin(), s.end())){cout << s <<
endl;}
return 0;
}

They seem to be working well, but I was wondering if there was a
better way to implement the same without using the STL function
next_permutation.

Thanks,
Sanket
 
Ad

Advertisements

I

Ian Collins

Hi all.

I wrote a program to print all permutations of the letters of a
string. Here are my two implementations

2.

#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;

int main(int argc, char ** argv)
{
if(argc< 2) {cout<< "Usage:\na.out<string>"<<
endl;abort();}

Calling abort is rather drastic, why not just "return EXIT_FAILURE"?
string s(argv[1]);
sort(s.begin(), s.end());
cout<< s<< endl;
while(next_permutation(s.begin(), s.end())){cout<< s<<
endl;}
return 0;
}

They seem to be working well, but I was wondering if there was a
better way to implement the same without using the STL function
next_permutation.

s/STL/standard library/

Why would you want to avoid a library function that does what you want
to do?
 
S

sanket

I wrote a program to print all permutations of the letters of a
string. Here are my two implementations


#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
int main(int argc, char ** argv)
{
         if(argc<  2) {cout<<  "Usage:\na.out<string>"<<
endl;abort();}

Calling abort is rather drastic, why not just "return EXIT_FAILURE"?
         string s(argv[1]);
         sort(s.begin(), s.end());
         cout<<  s<<  endl;
         while(next_permutation(s.begin(), s.end())){cout<<  s<<
endl;}
         return 0;
}
They seem to be working well, but I was wondering if there was a
better way to implement the same without using the STL function
next_permutation.

s/STL/standard library/

Why would you want to avoid a library function that does what you want
to do?

I am a newbie and wanted to see if my first implementation is optimal.
I should have asked this,
Is it possible to further optimize my first implementation?

--Sanket
 
Ad

Advertisements

D

DDD

On 11/29/11 02:46 PM, sanket wrote:
Calling abort is rather drastic, why not just "return EXIT_FAILURE"?
         string s(argv[1]);
         sort(s.begin(), s.end());
         cout<<  s<<  endl;
         while(next_permutation(s.begin(), s.end())){cout<< s<<
endl;}
         return 0;
}
They seem to be working well, but I was wondering if there was a
better way to implement the same without using the STL function
next_permutation.
s/STL/standard library/
Why would you want to avoid a library function that does what you want
to do?

I am a newbie and wanted to see if my first implementation is optimal.
I should have asked this,
Is it possible to further optimize my first implementation?

--Sanket

You need an algorithm. And you can choose recursion or not.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top