字符的排列

问题:输入一字符串(要求不存在重复字符),打印出该字符串中字符中字符的所有排列。

思路:求所有可能出现在第一个位置的字符,把第一个字符和其后面的字符一一交换。固定第一个字符,求后面所有字符的排列。这个时候扔把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符,然后把第一个字符逐一和它后面的字符交换。

 1 #include<stdio.h>
 2 #include "stdafx.h"
 3 #include<tchar.h>
 4
 5 void Permutation(char* pStr, char* pBegin);
 6
 7 void Permutation(char* pStr)
 8 {
 9     if(pStr == NULL)
10         return;
11
12     Permutation(pStr, pStr);
13 }
14
15 void Permutation(char* pStr, char* pBegin)
16 {
17     if(*pBegin == ‘\0‘)
18     {
19         printf("%s\n", pStr);
20     }
21     else
22     {
23         for(char* pCh = pBegin; *pCh != ‘\0‘ ; ++pCh)
24         {
25             char temp = *pCh;
26             *pCh = *pBegin;
27             *pBegin = temp;
28
29             Permutation(pStr, pBegin + 1);
30
31             temp = *pCh;
32             *pCh = *pBegin;
33             *pBegin = temp;
34         }
35     }
36 }
37
38 int main()
39 {
40
41     char string[] = "abc";
42     Permutation(string);
43
44     return 0;
45 }

时间: 2024-10-27 07:39:00

字符的排列的相关文章

【c语言】编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。

/*编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数.*/ #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_string

编写一个函数将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 注意:将参数字符串中的字符反向排列,不是反向输出. 代码如下: #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char *str)//求字符串长度 { int count=0; while(*str++) { co

将参数字符串中的字符反向排列

//编写一个函数reverse_string(char * string)(递归实现) //实现:将参数字符串中的字符反向排列. //要求:不能使用C函数库中的字符串操作函数. //第一种方法:递归法 #include <stdio.h> int reverse_string(char * string) {  if (*string != '\0')  {   string++;   reverse_string(string);   printf("%c", *(str

【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。

//编写一个函数reverse_string(char * string)(递归实现) //实现:将参数字符串中的字符反向排列. //要求:不能使用C函数库中的字符串操作函数. #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_stri

给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串

1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 * 1.应进行分析,变位词区分大小写吗?比如God和dog是变位词?还需要考虑空格问题? 6 * 在这里我们假定是区分大小写的. 7 * 2.比较两个字符串时,如果它们的长度都不相等了,那肯定不是变位词 8 * 9 * 10 * */ 11 12 public class IsSameString

C语言 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. #include <stdio.h> #include <string.h> #include <assert.h> int reverse_string(char * str) { assert(str); int len=strlen(str); char *ch=str+len-1; while(len>1) { char tmp=*st

利用flexbox实现按字符长度排列dom元素

说明:请使用chrome浏览器打开 See the Pen pvyjGV by lilyH (@lilyH) on CodePen. 如上图所示,我们你要实现的效果就是,(1)在一行中显示两块元素:(2)每块元素的长度根据它里面的文字变化 还是先看代码吧: HTML <ul class="flex-container"> <li class="flex-item"><div>1234567</div></li&g

C语言编程 递归方法与非递归方法 实现将参数字符串中的字符反向排列

//题目要求要求:不能使用C函数库中的字符串操作函数(否则本题也没什么意义了啊) <1>非递归方法此方法基本思想是设立两个指针,分别指向字符串的头尾并且依次交换所指向的数据,代码中为left和right源代码: #include<stdio.h> #include<stdlib.h> #include<string.h>//因为要使用strlen()语句 void reverse_string(char str[]) { int temp; char *le

给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。

1 import java.util.*; 2 //import org.apache.commons.lang.StringUtils; 3 4 public class Same { 5 public boolean checkSam(String stringA, String stringB) { 6 boolean ifequal=false; 7 if(stringA.length()!= stringB.length()){ 8 return ifequal; 9 } 10 Str