字符交替:给出两个字符串打印出所有由这两个字符串交替组成的字符串,要求维持原有字符的相对顺序
举例:
输入“AB”和“CD”
输出:
ABCD
ACBD
ACDB
CABD
CADB
CDAB
分析:
1、当S1和S2均无字符可用时,则返回空串。
2、当其中一个无字符可用,比如S1剩余字符为空,那么把S2剩余字符附在已经得到的字符组合后面,并输出结果。
3、其他情况,我们可以从S1取一个字符,或者可以从S2中取一个字符,保存已得到的字符组合,然后递归调用函数。
为了方便,可以使用string类
//C++ 更安全的向量元素访问方式 | C++ at()成员函数【C++ 用at()成员函数访问向量元素,是一种安全的访问方式,可以有效地避免错误代码的继续执行】 //以下程序使用at()成员函数访问向量元素,是一种安全的访问方式,可以有效地避免错误代码的继续执行string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串。
#include <string> #include <iostream> using namespace std; void printInternal(string &S1, string &S2, string soFar) { if ((S1.size() == 0) && (S2.size() == 0)) return; if (S1.size() == 0) { cout << soFar+S2 << endl; return; } if (S2.size() == 0) { cout << soFar+S1 << endl; return; } printInternal(S1.substr(1, S1.size()-1), S2, soFar+S1.at(0)); printInternal(S1, S2.substr(1, S2.size()-1), soFar+S2.at(0)); } void printInterleavings(string &S1, string &S2) { printInternal(S1, S2, ""); } int main() { string s1 = "AB"; string s2 = "CD"; printInterleavings(s1, s2); return 0; }
原文:http://blog.csdn.net/u014082714/article/details/45334171