- #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);