写一个函数输出一个字符串中的所有排列
2014-05-28 16:49
162 查看
我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a的排列。
#include<iostream.h> bool repeatnumber(char *bg,char *pch) { bool f=false; for(char *q=bg;q!=pch;q++) if(*q==*pch) { f=true; break; } return f; } void pailie(char *ch,char *bg) { if(*bg=='\0') cout<<ch<<endl; else { char tmp; for(char *pch=bg;*pch!='\0';pch++) { /*为了防止字符串中有相同的字符而造成排除的序列一样 而设置repeatnumber()函数进行检查,从bg到pch-1中间是不是 有和pch相同的字符,如果有就说明已经和前面的bg互换完成 不需要继续互换否则就会重复直接下一步 */ if(bg!=pch&&repeatnumber(bg,pch)) continue; tmp = *bg; *bg = *pch;//开始这里面一直报错,错误原因如下图,感谢csdn网友Fire_Lord的帮助 *pch = tmp; sequence(ch,bg+1); tmp = *bg; *bg = *pch; *pch = tmp; } } } void main() { char ch[]="abcde"; pailie(ch,ch); }
相关文章推荐
- 给出一个函数来输出一个字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列
- 算法40(字符串的排列,给出一个函数来输出一个字符串的所有排列)
- 给出一个函数来输出一个字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列
- 微软等数据结构+算法面试100题(2)--给出一个函数来输出一个字符串的所有排列
- 笔试题:给出一个函数来输出字符串的所有排列
- 给出一个函数来输出一个字符串的所有排列。
- 给出一个函数来输出一个字符串的所有排列。
- 70 给出一个函数来输出一个字符串的所有排列
- 3、给出一个函数输出字符串的所有排列
- 【递归】输出一个字符串的所有排列
- 用递归的思想写编写一个函数reverse_string(char * string)实现字符串反向输出和反向排列
- 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
- 输入一个字符串,要求输出字符串中字符所有的排列,例如输入"abc",得到"abc","acb","bca","bac","cab","cba"
- 编写函数fun(char *s),其功能是:把字符串中所有字符前移一个位置,串中的第1个字符移到最后。 例如,若输入字符串为:ABC123xyz ,则应输出字符串: BC123xyzA 。
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 输出一个字符串所有排列。注意有重复字符