![]() |
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 |
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 |
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 |
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 08:26 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.