首页 > 其他 > 详细

字符串的排列——28

时间:2016-06-02 23:45:58      阅读:315      评论:0      收藏:0      [点我收藏+]

    输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。


    对于一个字符来说,只有一个排列就是其自身,那么对于多个字符的组合来说,也是有规律可循的:可以在字符串中选出一个字符来固定出头部,比如上述先用a来开头,那么后面的部分就由b、c来组成,之后再将b、c分别更换为头部,后面的就由剩下的字符来组成,而如果字符串中的字符比较多的时候,可以先从字符串的尾部开始排列,首先排列最后两个字符,交换后面两个字符,然后增加到三个字符,更换头部,排列剩下的部分,再依次增加到四个字符,更换头部,排雷剩下的部分......因此,这种思路可以用递归来实现:

#include <iostream>
using namespace std;

void PrintAllArray(char* str, char *p_start)
{
    if(str != NULL)//判断参数有效性
    {   
        //当遍历到字符串结尾的时候就应当将字符串打印出来
        if(*p_start == ‘\0‘)
        {
            cout<<str<<endl;
            return;
        }

        for(char *tmp = p_start; *tmp != ‘\0‘; ++tmp)
        {
            swap(*tmp, *p_start);//将当前头部更换为所有可能的字符
            PrintAllArray(str, p_start+1);//进行递归排列
            swap(*tmp, *p_start);//不能影响再次进行有序的交换,所以排列之后应当再将其交换回来
        }
    }   
}

int main()
{
    char str[] = "abcd";
    char* p_tmp = str;
    PrintAllArray(str, p_tmp);
    return 0;
}


运行程序:

技术分享



《完》

本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1785656

字符串的排列——28

原文:http://2627lounuo.blog.51cto.com/10696599/1785656

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!