面试题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 }

运行截图:

 

转载于:https://www.cnblogs.com/vpoet/p/4770966.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值