C++ 求一个字符串的所有排列

/*输入一个字符串,打印出该字符串中字符的所有排列*/
#include <iostream>
#include <stdio.h>

using namespace std;
void PermutationS2(char* pStr, char* pBegin)
{
	if(*pBegin == '\0')
		cout << pStr<<'\t';
	else
	{
		char *pTemp = pBegin;
		while(*pTemp != '\0')
		{
			swap(*pTemp,*pBegin);
			PermutationS2(pStr,pBegin+1);
			swap(*pTemp,*pBegin);
			pTemp ++;
		}
	}
}
void PermutationS1(char *pStr, int begin, int end)
{
	if(end - begin == 1)
		cout << pStr<<'\t';
	else{
		for(int i = begin; i < end; i++)
		{
			swap(pStr[begin],pStr[i]);
			PermutationS1(pStr, begin+1,end);
			swap(pStr[begin],pStr[i]);
		}
	}
}
void swap(char& a, char& b)
{
	char temp = b;
	b = a;
	a = temp;
}
void Permutation(char *pStr)
{
	if(pStr == NULL)
		return;
	/*int index = 0;
	while(pStr[index]!='\0')
		index++;*/
	cout << "Solution1: ";
	PermutationS1(pStr, 0, strlen(pStr));
	cout <<endl << "Solution2: ";
	PermutationS2(pStr, pStr);
}

void Test(char* str)
{
	if(str == NULL)
		cout << "Test for NULL begins";
	else
		cout << "Test for " << str <<endl;
	Permutation(str);
	cout<<endl;
}
int main()
{
	Test(NULL);
	char str1[] = "";
	Test(str1);

	char str2[] = "a";
	Test(str2);

	char str3[] = "ab";
	Test(str3);

	char str4[] = "abc";
	Test(str4);

	system("PAUSE");
	return 0;
}

运行结果如下:




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值