面试题28.字符串的排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,

则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba.

 

此题的主要步骤由如下几步:

1.求出所有可能出现在第一个位置的字符

2.将第一个字符与后面字符分别交换

3.将第一个字符后面的字符递归步骤1,2

 

代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void FunOfString(char* Str,char* Begin)
 5 {
 6     if(!Str||!Begin)
 7     {
 8         return;
 9     }
10 
11     if(*Begin=='\0')
12     {
13         cout<<Str<<endl;
14     }
15     else
16     {
17         for(char* ch=Begin;*ch!='\0';ch++)
18         {
19             char temp;
20             temp=*ch;
21             *ch=*Begin;
22             *Begin=temp;
23 
24             FunOfString(Str,Begin+1);
25 
26             temp=*ch;
27             *ch=*Begin;
28             *Begin=temp;
29         }    
30     }
31 }
32 
33 int main()
34 {
35     char Str[]="vpoet";
36     FunOfString(Str,Str);
37     system("pause");
38     return 0;
39 }

运行截图:

 

posted @ 2015-08-30 15:27  vpoet  阅读(261)  评论(1编辑  收藏  举报