#include <iostream>
#include <vector>
#include <string>
using namespace std;
/*
str: 带解析字符串
iSubLen: 字串的长度
index: 起始位置
iStrLen: str的长度
strSub: 子串
vec: 存储字串
函数功能: 求一个字符串任意长度的子序列
*/
void GetSubStrEx(const string& str,int iSubLen,int index,int iStrLen,const string& strSub,vector<string>& vec)
{
if(index + iSubLen > iStrLen || iSubLen<=0) // 这种情况下需退出递归
{
if(!strSub.empty())
{
vec.push_back(strSub); // 此时,index = iStrLen +1,iSubLen=0
}
return ;
}
for(int i=index;i<=iStrLen-iSubLen;i++)
{
char ch = str.at(i);
string strNewSub = strSub;
strNewSub.append(1,ch); //从起始位置获得第一个字符
// 下一次递归时,子串长度减1,因为刚刚获得了一个字符,同时,起始位置加1,因为刚刚获得了一个字符
// 这个位置在下次递归时不可以再获得
GetSubStrEx(str,iSubLen-1,i+1,iStrLen,strNewSub,vec);
}
}
void GetSubStr(const string& str,int iSubLen,vector<string>& vec)
{
string strSub = "";
GetSubStrEx(str,iSubLen,0,str.length(),strSub,vec);
int iSize = vec.size();
for(int i =0;i<iSize;i++)
{
cout<<vec[i]<<endl;
}
}
main.cpp
vector<string> vec;
string str = "ABCDEF";
GetSubStr(str,3,vec);