温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

字符串的排列——28

发布时间:2020-07-20 20:28:32 来源:网络 阅读:330 作者:给我个bit位 栏目:编程语言

    输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串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;
}


运行程序:

字符串的排列——28



《完》

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI