几道笔试题的解法(七)

来源:互联网 发布:速卖通可以淘宝代销吗 编辑:程序博客网 时间:2024/04/29 23:38

题目:用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);  
}

 

测试结果如下图: