题目:
输入一个字符串,打印出该字符串中字符的所有排列
思想:
把一个字符串看成是两部分组成:第一部分为他的第一个字符,第二部分为后面所有的字符
首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换.
然后固定第一个字符,求后面所有字符的排列,仍把后面的所有字符分成两部分:后面字符
的第一个字符,以及这个字符后面的所有字符
最后把第一个字符逐一和后面的字符交换
#include<stdio.h>
#include<stdlib.h>
void permutation_ex(char* ,char*);
void permutation(char* pStr)
{
if(pStr==NULL)
return;
permutation_ex(pStr,pStr);
}
/*pStr指向整个字符串的第一个字符,pBegin指向当前我们做排列操作的字符串的第一个
字符,在每一次递归的时候,从pBegin向后扫描每一个字符.在交换pbegin和pCh
指向的字符之后,再对pBegin后面的字符串递归排列,直至pBegin指向字符串的末尾
*/
void permutation_ex(char* pStr,char* pBegin)
{
if(*pBegin=='\0')
printf("%s",pStr);
else
{
for(char* pCh=pBegin;*pCh!='\0';++pCh)
{
char temp=*pCh;
*pCh=*pBegin;
*pBegin=temp;
permutation_ex(pStr,pBegin+1);
temp=*pCh;
*pCh=*pBegin;
*pBegin=temp;
}
}
}
int main()
{
int num=4;
char pStr[num];
scanf("%s",&pStr);
permutation(pStr);
return 0;
}
结果:
分享到:
相关推荐
在编程领域,字符串排列组合是一个常见的算法问题,它涉及到如何生成一个字符串的所有可能的排列方式。这个主题主要与计算机科学的算法设计和技术有关,尤其是在数据结构和算法分析的课程中经常遇到。本节将深入探讨...
在IT领域,字符串排列问题是一个经典的算法问题,它涉及到组合数学和计算机科学中的排序与搜索。本问题的核心是求解一个字符串中不重复字符的所有可能排列,并计算这些排列的总数。这个问题可以使用C++这样的编程...
从给定的代码片段来看,该程序旨在生成一个字符串的所有可能排列组合,但代码实现上存在一些问题,例如,函数命名、逻辑结构以及对内存管理的处理方式等,都偏离了标准的C语言编程实践。下面,我们将深入解析标题、...
以下是使用回溯法实现C++字符串排列的伪代码: ```cpp void permute(string str, int start) { if (start == str.size()) { // 打印或处理排列 cout ; return; } for (int i = start; i (); i++) { swap...
在编程领域,字符串排列是一个经典的算法问题,主要涉及到字符串处理和递归技术。字符串的所有排列是指将一个字符串中的字符按照不同的顺序重新组合,形成所有可能的字符串。这个问题通常用于考察程序员对递归的理解...
在PHP编程语言中,处理字符串的排列组合是常见的任务,特别是在数据分析、彩票系统或其他需要生成所有可能结果的场景中。本篇文章将详细讲解如何利用PHP实现字符串的组合算法,特别是针对“组二”和“组三”的组合...
Java 实现字符串排列组合问题 Java 是一门广泛应用于软件开发的编程语言,字符串操作是其最基本也是最重要的功能之一。在实际开发中,字符串排列组合问题是非常常见的,例如输入一个字符串,要求输出该字符串中...
"Java实现abc字符串排列组合" 本文将详细介绍Java实现abc字符串的排列组合,主要包括可重复排列、全排列和组合三个部分。 可重复排列 在Java中,可以使用递归来实现abc字符串的可重复排列。可重复排列是指从abc三...
4. **字符串排列组合问题**: - 问题1:字符串的全排列,可以通过回溯算法实现,每次选择未使用的字符并递归到下一层。 - 问题2:字符串的组合,可以使用递归或者动态规划。递归方法中,每次可以选择使用当前字符...
总之,这个解决方案展示了如何利用深度优先搜索来解决全排列问题,通过递归和回溯生成所有可能的字符串排列,并将其存储在一个有序的向量中。这种方法在理解和实现上都相对直观,但需要注意对大字符串时可能出现的...
排序完成后,将排序后的数组转换回字符串,即可得到重新排列的新字符串。 题目中提到了在"NewOrder中"添加条件,这暗示了可能需要根据某些规则或约束进行排序。例如,条件可能是新字符串必须是递增或递减的,或者新...
* `substr("ABCDEFG", 0, -3)` 返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。 二、instr 函数 instr 函数用于查找字符串中的子字符串,语法为 `instr(string, subString, position, ...
标题 "(ABCDE)字符串排序" 描述了一个使用C++编程语言实现字符串排列的问题。通过四种不同的模板和系统函数,特别是利用`string_permutation`方法,我们可以生成一个字符串的所有可能排列。这种排列通常涉及到...
新字符串中的字符按照在字符串`t`中的原始顺序排列,并且要去掉重复的字符。 ### 1. 问题理解与分析 题目要求我们找出字符串`t`中所有不在字符串`s`中出现的字符,并按照`t`中的顺序排列组成新的字符串存储到`p`所...
在字符串全排列问题中,我们需要找出一个给定字符集的所有可能的排列组合。例如,对于字符串 "abc",全排列包括 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。这个问题可以使用回溯法来解决,其基本步骤如下: 1. ...
Java 排列组合字符串是一种常见的编程问题,旨在生成所有可能的字符串排列组合。下面我们将详细介绍 Java 排列组合字符串的方法。 什么是排列组合 排列组合是一种数学概念,指的是从一个集合中选择部分元素,并将...
本文实例讲述了php一个解析字符串排列数组的方法。分享给大家供大家参考。具体如下: <?php $str=1|苹果|30 1|桃子|50 1|普通|10 2|小麦|100 2|玉米|35 2|大米|30 3|电脑|5 3|MP3|121 3|打印机|8; $strArray=...
整个算法的核心在于`dfs`函数,它利用递归的方式构建所有可能的字符串排列。由于每次构造新字符串时,都会检查已使用的字符并进行回溯,所以不会产生重复的排列。在`permutation`函数中,我们先使用`dfs`得到所有...
5. **标签中的“排列”**:这可能指的是对截取的子字符串进行排序。在Java中,我们可以使用`Arrays.sort()`方法对字符串数组进行排序,或者使用`Collections.sort()`方法对`List<String>`进行排序。对于单个字符串,...
C语言程序设计-对长度为8个字符的字符串,将8个字符按降序排列;例如:原来的字符串为CEAedcab,排序后输出为edcbaE