目录
Rotate()
示例
输出
Next_Permutation
结论
首页 后端开发 C++ 使用STL实现给定字符串的C++全排列

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

Sep 01, 2023 pm 11:33 PM
字符串 stl 全排列

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

当给定字符串的字符以任意形式重新排列时,就形成了字符串的排列。例如,在本教程中,我们将讨论如何使用 C++ 的标准模板库打印给定字符串的所有排列

1

2

3

4

5

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 的旋转函数,该函数用于旋转字符串,并且我们将使用递归来打印排列。

示例

上述方法的 C++ 代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#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;

}

登录后复制

输出

1

2

3

4

5

6

ADT

ATD

DTA

DAT

TAD

TDA

登录后复制

Next_Permutation

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

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

示例

上述方法的 C++ 代码

1

2

3

4

5

6

7

8

9

10

#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;

}

登录后复制

输出

1

2

3

4

5

6

ADT

ATD

DAT

DTA

TAD

TDA

登录后复制

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

结论

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

以上是使用STL实现给定字符串的C++全排列的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

python怎么重复字符串_python重复字符串教程 python怎么重复字符串_python重复字符串教程 Apr 02, 2024 pm 03:58 PM

1、首先打开pycharm,进入到pycharm主页。2、然后新建python脚本,右键--点击new--点击pythonfile。3、输入一段字符串,代码:s="-"。4、接着需要把字符串里面的符号重复20次,代码:s1=s*20。5、输入打印输出代码,代码:print(s1)。6、最后运行脚本,在最底部会看到我们的返回值:-就重复了20次。

如何在Go语言中截取字符串 如何在Go语言中截取字符串 Mar 13, 2024 am 08:33 AM

Go语言是一种强大且灵活的编程语言,它提供了丰富的字符串处理功能,包括字符串截取。在Go语言中,我们可以使用切片(slice)来截取字符串。接下来,将详细介绍如何在Go语言中截取字符串,并附上具体的代码示例。一、使用切片截取字符串在Go语言中,可以使用切片表达式来截取字符串的一部分。切片表达式的语法如下:slice:=str[start:end]其中,s

PHP中int类型转字符串的方法详解 PHP中int类型转字符串的方法详解 Mar 26, 2024 am 11:45 AM

PHP中int类型转字符串的方法详解在PHP开发中,经常会遇到将int类型转换为字符串类型的需求。这种转换可以通过多种方式实现,本文将详细介绍几种常用的方法,并附带具体的代码示例来帮助读者更好地理解。一、使用PHP内置函数strval()PHP提供了一个内置函数strval(),可以将不同类型的变量转换为字符串类型。当我们需要将int类型转换为字符串类型时,

如何在 C++ STL 中实现定制的比较器? 如何在 C++ STL 中实现定制的比较器? Jun 05, 2024 am 11:50 AM

实现定制比较器可以通过创建一个类,重载运算符()来实现,该运算符接受两个参数并指示比较结果。例如,StringLengthComparator类通过比较字符串长度来排序字符串:创建一个类并重载运算符(),返回布尔值指示比较结果。在容器算法中使用定制比较器进行排序。通过定制比较器,我们可以根据自定义标准对数据进行排序或比较,即使需要使用自定义比较标准。

Golang中如何检查字符串是否以特定字符开头? Golang中如何检查字符串是否以特定字符开头? Mar 12, 2024 pm 09:42 PM

Golang中如何检查字符串是否以特定字符开头?在使用Golang编程时,经常会遇到需要检查一个字符串是否以特定字符开头的情况。针对这一需求,我们可以使用Golang中的strings包提供的函数来实现。接下来将详细介绍如何使用Golang检查字符串是否以特定字符开头,并附上具体的代码示例。在Golang中,我们可以使用strings包中的HasPrefix

如何获取C++ STL容器的大小? 如何获取C++ STL容器的大小? Jun 05, 2024 pm 06:20 PM

通过使用容器的size()成员函数,可以获取容器中元素的数量。例如,vector容器的size()函数返回元素数量,list容器的size()函数返回元素数量,string容器的length()函数返回字符数量,deque容器的capacity()函数返回分配的内存块数量。

如何排序C++ STL容器? 如何排序C++ STL容器? Jun 02, 2024 pm 08:22 PM

C++中对STL容器排序的方法:使用sort()函数,原地排序容器,如std::vector。使用有序容器std::set和std::map,元素在插入时自动排序。对于自定义排序顺序,可以使用自定义比较器类,如按字母顺序排序字符串向量。

PHP字符串操作:去除多余逗号,保留唯一逗号实现技巧 PHP字符串操作:去除多余逗号,保留唯一逗号实现技巧 Mar 28, 2024 pm 03:02 PM

PHP字符串操作:去除多余逗号,保留唯一逗号实现技巧在PHP开发中,字符串处理是一个非常常见的需求。有时候我们需要对字符串进行处理,去除多余的逗号,保留唯一的逗号。在这篇文章中,我将介绍一种实现技巧,并提供具体的代码示例。首先,我们来看一个常见的需求:假设我们有一个包含多个逗号的字符串,我们需要去除多余的逗号,只保留唯一的逗号。例如,将"apple,ba

See all articles