//非常好的递归题,我差一点就想出来了,再接再励! /* 经典报错总结:(使用传来的字符串参数出现问题) 请检查是否存在数组、列表等越界非法访问,内存非法访问等情况 terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::erase: __pos (which is 2) > this->size() (which is 1) nextstr=str; nextstr=nextstr.erase(i,1);//不能写成nextstr=str.erase(i,1); 不能对传来的string参数进行改变 */ #include <iostream> using namespace std; void DG(string pre,string str) { int l=str.size(); string nextpre,nextstr; if(l==1) { cout<<pre+str<<endl; } else { for(int i=0;i<l;i++) { nextpre=pre+str[i]; nextstr=str; nextstr=nextstr.erase(i,1);//不能写成nextstr=str.erase(i,1); DG(nextpre,nextstr); } } } int main() { string a; while (cin >> a ) { DG("",a); } }