📜  打印给定字符串的所有排列的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:10:02.527000             🧑  作者: Mango

打印给定字符串的所有排列的 C++ 程序

这里介绍一种使用递归方法打印给定字符串的所有排列的 C++ 程序。

思路

排列是指从一组数字或者字符中取出一些元素进行组合,不同取法形成的序列就叫做排列。在这个程序中,我们要打印出给定字符串的全排列,也就是字符串中所有字符的不同组合。

这个问题可以通过递归来解决。我们可以将给定字符串分为两个部分:第一个字符和剩余的字符。第一步我们先把第一个字符与后面的字符逐一交换位置,得到新的字符串;接着,对新的字符串进行递归,直到字符串长度为1时,输出排列结果为止。

代码实现

下面是 C++ 的程序代码:

#include <iostream>
#include <string>
using namespace std;

void permutation(string s,int begin,int end)
{
    if(begin == end)
        cout<<s<<endl;
    else
    {
        for(int i=begin;i<=end;i++)
        {
            swap(s[i],s[begin]);
            permutation(s,begin+1,end);
            swap(s[i],s[begin]);
        }
    }
}

int main()
{
    string s="abcd";
    permutation(s,0,s.length()-1);
    return 0;
}
解释说明:
  1. 首先声明一个 permutation 函数,参数为 string 类型的字符串 s 和两个整数型参数 beginend 。其中, begin 为字符串 s 的起始位置, end 为字符串 s 的结束位置。

  2. begin = end,即 s 是最后一个字符,则打印 s

  3. begin < end,则递归的进行以下步骤:

    a. 将字符串 s 中第 begin 个字符与后面的字符逐一交换位置。

    b. 对新的字符串进行递归,即 permutation(s,begin+1,end)

    c. 恢复第 begin 个字符与后面的字符的位置,即 swap(s[i],s[begin])

  4. main 函数中,声明一个字符串 s,然后调用 permutation 函数,并输入参数 s0s.length()-1

测试结果

输入字符串 "abcd",程序输出如下:

abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
总结

以上是一个简单的通过递归来打印给定字符串的所有排列的 C++ 程序。通过这个方法,我们可以更直观地体会到递归的思想和应用,掌握递归函数的实现和调用方法。