【1】题目
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
【2】思路
【3】代码
#pragma once
#ifndef CHANGECHAR_H
#define CHANGECHAR_H
class ChangeChar
{
public:
ChangeChar();
~ChangeChar();
//两个函数函数名相同,形参不同,相当于多态
void Permutation(char* pStr);
void Permutation(char*pStr, char* pBegin);
};
#endif // !CHANGECHAR_H
#include "pch.h"
#include "ChangeChar.h"
#include<iostream>
using namespace std;
ChangeChar::ChangeChar()
{
}
ChangeChar::~ChangeChar()
{
}
void ChangeChar::Permutation(char* pStr)
{
if (pStr==nullptr)
{
return;
}
cout << pStr << "的排列为:";
Permutation(pStr, pStr);
}
//输入一个字符串和字符串的起始位置
void ChangeChar::Permutation(char*pStr, char* pBegin)
{
//如果到达末尾位置
if (*pBegin=='\0')
{
printf("%s\n", pStr);
}
else//如果没到达末尾位置
{
for (char* pCh=pBegin; *pCh != '\0';++pCh)
{
//交换起始位置和后续位置的元素
char temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
//待交换字符串的位置向后移动1位
Permutation(pStr, pBegin + 1);
//重新设置起始位置,起始位置向后移动一位
temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
}
}
}