使用STL的C++给定字符串排列


字符串的排列是指给定字符串的字符以任何形式重新排列后形成的新字符串。在本教程中,我们将讨论如何使用C++的标准模板库(STL)打印给定字符串的所有排列,例如:

Input : s = “ADT”

Output : “ADT”, “ATD”, “DAT”, “DTA”, “TAD”, “TDA”

Explanation : In the given output as you can see all the string are made up of same three character present in our string and are just rearranged thus they fit in the definition of a permutation of a string now there is one more thing to note these are all the permutations possible of string s.

有两种方法可以打印给定字符串的所有排列。

rotate() 函数

我们将使用的方法是使用STL的rotate函数。此方法将使用STL的rotate函数旋转字符串,并使用递归来打印排列。

示例

上述方法的C++代码

#include<bits/stdc++.h>
using namespace std;
void permutations(string s, string ans){
    if(s.size() == 0) {
// when our string which needs to
//be rotated becomes empty then it means
//that our permutation is stored in ans
        cout << ans << "\n";
        return ;
    }
    for(int i = 0; i < s.size(); i++){
        permutations(s.substr(1), ans + s[0]);
        // we are adding the
        // first character in our ans
        // passing all elements from index 1 in our
        // rotate string for next function.
        rotate(s.begin(), s.begin()+1, s.end());
        //rotating such that our second element becomes first
    }
}
int main(){
    string s = "ADT"; // given string
    permutations(s, "");
    return 0;
}

输出

ADT
ATD
DTA
DAT
TAD
TDA

next_permutation() 函数

现在,我们将使用STL的另一个函数next_permutation。顾名思义,此函数的返回值表示该字符串的下一个排列是否存在。如果不存在,则返回false。

如您所知,此函数检查下一个排列;因此,我们首先需要按字典顺序对字符串进行排序,以便获得所有可能的排列。

示例

上述方法的C++代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s = "ADT"; // given string
    sort(s.begin(), s.end()); // sorting the string
    do{
        cout << s << "\n"; // printing the permutations
    }while(next_permutation(s.begin(), s.end())); // till next_permutations returns false
    return 0;
}

输出

ADT
ATD
DAT
DTA
TAD
TDA

在上面的程序中,我们对字符串进行排序,然后借助next_permutation函数打印所有可能的排列。

结论

在本教程中,我们使用C++中的STL打印了给定字符串的所有可能的排列。我们还学习了此问题的C++程序以及一些重要的STL函数及其用途。希望本教程对您有所帮助。

更新于:2021年11月25日

974 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告