Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   Best way to print all possible permutations of a string (http://www.velocityreviews.com/forums/t806384-best-way-to-print-all-possible-permutations-of-a-string.html)

sanket 11-29-2011 01:46 AM

Best way to print all possible permutations of a string
 
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


Ian Collins 11-29-2011 02:01 AM

Re: Best way to print all possible permutations of a string
 
On 11/29/11 02:46 PM, sanket wrote:
> Hi all.
>
> I wrote a program to print all permutations of the letters of a
> string. Here are my two implementations


<snip>

> 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?

--
Ian Collins

sanket 11-29-2011 08:24 AM

Re: Best way to print all possible permutations of a string
 
On Nov 28, 8:01*pm, Ian Collins <ian-n...@hotmail.com> wrote:
> On 11/29/11 02:46 PM, sanket wrote:
>
> > Hi all.

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

>
> <snip>
>
> > 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?
>
> --
> Ian Collins


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

DDD 11-30-2011 04:55 AM

Re: Best way to print all possible permutations of a string
 
On Nov 29, 4:24*pm, sanket <sanketsharm...@gmail.com> wrote:
> On Nov 28, 8:01*pm, Ian Collins <ian-n...@hotmail.com> wrote:
>
>
>
>
>
>
>
>
>
> > On 11/29/11 02:46 PM, sanket wrote:

>
> > > Hi all.

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

>
> > <snip>

>
> > > 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?

>
> > --
> > Ian Collins

>
> 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.


All times are GMT. The time now is 07:09 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.