您的位置:首页 > 其它

几道笔试题的解法(七)

2010-03-31 23:28 387 查看
题目:用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);
}

测试结果如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: