字符串全排列
2016-03-26 13:29
309 查看
输入一字符串(要求不存在重复字符),打印出该字符串中字符中字符的所有排列。
例如:输入"abc",输出结果为abc, acb, bac, bca, cab和cba。#include <iostream> #include <string> using namespace std; void swap( char *a, char *b){ char temp; temp = *a; *a = *b; *b = temp; } void permute( char *pStr, char *pBegin); void permute( char *pStr){ if ( pStr == NULL) return; permute ( pStr, pStr); } void permute( char *pStr, char *pBegin){ if ( *pBegin == '\0') { cout << pStr; } else { for ( char *ch = pBegin ; *ch != '\0' ; ch++) { swap ( *ch , *pBegin); permute ( pStr , pBegin+1); cout <<' '; swap ( *ch , *pBegin); //保持初始状态 } } } int main(){ cout << "请输入一列字符串:" ; char str[10]; cin >> str; cout << "字符全排列为:" ; permute ( str ); cout << endl; return 0; }
输入一字符串(要求可以存在重复字符),打印出该字符串中字符的所有排列。
例如:输入"abb",输出结果为abb, bab, bba。去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。
例如:“abb”,第一个字符a和第二个字符b交换,得到“bab”,此时由于第二个字符和第三个字符相同,所有第一个字符“a”不与第三个字符“b“交换。再考虑,”bab“,第二个字符和第三个字符不同,交换得”bba“,此时结束。生成全部排列
加一个判断,满足条件再进行交换
//在[nBegin,nEnd)区间中是否有字符与下标为pEnd的字符相等
bool IsSwap(char* pBegin, char* pEnd)
{
char* p;
for (p=pBegin; p<pEnd; p++)
{
if (*p == *pEnd)
return false;
}
return true;
}
相关文章推荐
- HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
- Fragment实现底部栏
- Java包名命名规则(转载)
- 教育技术菅若琳
- 《C++计时器》
- 互动投影系统
- 16年腾讯笔试模拟题
- 链表中环的入口结点
- [C#]第30位数字是多少
- CentOS 6.5 升级内核 kernel
- webapi返回json格式优化
- STC89C52单片机串口调试(http://blog.sina.com.cn/s/blog_7cae472801015idp.html)
- 大数乘法
- 中缀表达式求值
- Puppet之基础篇
- Android 增强版百分比布局库 Eclipse Demo
- HDU4763 Theme Section KMP-next应用
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- 自定义dialog
- 中缀表达式求值