输出字符串的所有组合

#include<iostream>
using namespace std;
void combication(char * str,char * p, char * q) {
  if(*str=='\0'){
	if(p!=q){
		*q='\0';
		cout<<p<<' ';
	}return;}
	combication(str+1,p,q);
	*q=*str;
	combication(str+1,p,q+1);
}
void combicate(char * str,int len){
	int  used[1024]={
		0
	};
	char  cache[1024];
	char *result=cache+len;
	*result='\0';
	while(1){
	int index=0;
	while(used[index]){
		used[index]=0;
		result++;
		if(++index==len){
			return;
		}
	}
	used[index]=true;
	*--result=str[index];
	cout<<result<<' ';
	}
}
int power(int n){
	int r=1;
	for(int i=0;i<n;i++){
		r*=2;
	}
	return r;
}
void combac(char * str,int len){
	for(int i=1;i<power(len);i++){
		int index=0;
		int m=i;
		while(m){
			if(m%2)
			 cout<<str[index];
			 index++;
			 m/=2;
		}
		cout<<' ';
	}
}
int main(){
	char  a[]="abc";
	char temp[256];
	char *p=temp;
	char *q=temp;
	combication(a,p,q);
	//combicate(a,3);
	//combac(a,3);
}


转载于:https://my.oschina.net/yanjianhai/blog/260720

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值