题目:用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, 如 abc 的全排列: abc, acb, bca, dac, cab, cba 。
分析:本题考查递归和指针的知识点。
代码如下:(声明:部分代码来自网络)
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
void ConverseStr(char *_strBegin, char *_strEnd)
{
int i=0;
int j=0;
int k=0;
if(strlen(_strEnd)==0)
{
printf("%s/n",_strBegin);
}
else
{
char *str1=(char *)malloc(sizeof(char)*((int)strlen(_strBegin)+2));
char *str2=(char *)malloc(sizeof(char)*(int)strlen(_strEnd));
strcpy(str1,_strBegin);
for(i=0;i<(int)strlen(_strEnd);i++)
{
str1[strlen(_strBegin)]=_strEnd[i];
str1[strlen(_strBegin)+1]='/0';
k=0;
for(j=0;j<(int)strlen(_strEnd);j++)
{
if(i==j)
continue;
str2[k]=_strEnd[j];
k++;
}
str2[k]='/0';
ConverseStr(str1,str2); //循环递归其他组合
}
free(str2);
free(str1);
}
}
void Foo(char *str)
{
ConverseStr("",str);
}
int main(void)
{
char *str = "abc";
Foo(str);
}
测试结果如下图: