21xrx.com
2024-12-22 16:33:59 Sunday
登录
文章检索 我的文章 写文章
C++ 字符串排列组合实现
2023-07-05 12:56:17 深夜i     --     --
C++ 字符串 排列 组合 实现

C++ 是一种广泛使用的编程语言,由于其高效性和灵活性,一直是许多程序员的首选。在编写 C++ 代码时,字符串是一个经常使用的数据类型。在许多实际应用中,需要对字符串进行排列和组合操作,以实现特定的算法和功能。本文将介绍如何在 C++ 中实现字符串的排列和组合功能。

一、字符串排列

排列可以理解为将字符串中的字符进行全排列。例如,字符串 "abcd" 的排列为 "abcd"、"abdc"、"acbd"、"acdb"、"adbc"、"adcb"、"bacd"、"badc"、"bcad"、"bcda"、"bdac"、"bdca"、"cabd"、"cadb"、"cbad"、"cbda"、"cdab"、"cdba"、"dabc"、"dacb"、"dbac"、"dbca"、"dcab"、"dcba"。

实现字符串排列可以使用递归算法。将字符串中的第一个字符依次与其余字符交换位置,直到对整个字符串进行操作,得到一个排列结果。对于字符串中的每个字符,都可以重复采用这种方式,从而得到所有的排列结果。下面是字符串排列的 C++ 代码实现:


#include <iostream>

using namespace std;

void permute(string str, int l, int r) {

  if (l == r)

    cout << str << endl;

   else {

    for (int i = l; i <= r; i++) {

      swap(str[l], str[i]);

      permute(str, l+1, r);

      swap(str[l], str[i]);

    }

  }

}

int main() {

  string str = "abcd";

  int n = str.length();

  permute(str, 0, n-1);

  return 0;

}

输出:


abcd

abdc

acbd

acdb

adcb

adbc

bacd

badc

bcad

bcda

bdca

bdac

cabd

cadb

cbad

cbda

cdba

cdab

dabc

dacb

dbac

dbca

dcba

dcab

二、字符串组合

组合可以理解为从字符串中选出一部分字符,构成新的字符串。例如,字符串 "abcd" 中选出两个字符可以得到如下组合结果:"ab"、"ac"、"ad"、"bc"、"bd"、"cd"。实现字符串组合可以使用递归算法。对于从字符串中选择的每个字符,可以选择包含它或不包含它,并将结果输出。下面是字符串组合的 C++ 代码实现:


#include <iostream>

using namespace std;

void combination(string str, int n, int r, string result[], int index, int i) {

  if (index == r) {

    for (int j = 0; j < r; j++) {

      cout << result[j];

    }

    cout << endl;

    return;

  }

  if (i >= n)

    return;

  

  result[index] = str[i];

  combination(str, n, r, result, index+1, i+1);

  combination(str, n, r, result, index, i+1);

}

int main() {

  string str = "abcd";

  int n = str.length();

  string result[n];

  for (int r = 1; r <= n; r++) {

    combination(str, n, r, result, 0, 0);

  }

  return 0;

}

输出:


a

b

c

d

ab

ac

ad

bc

bd

cd

abc

abd

acd

bcd

abcd

本文介绍了 C++ 中实现字符串排列和组合的方法。在实际应用中,字符串排列和组合是一种常用的数据操作。可以使用递归算法轻松实现。

  
  
下一篇: C++工作求职

评论区

{{item['qq_nickname']}}
()
回复
回复