#include <iostream> #include <string> using namespace std; char res[50];int tag=1; void dfs(int k,int len, int st,char str[]){//st为结果串的当前位置 if(k==len){ res[st]=''; cout<<"result is: "; cout<<res<<endl; return; } if (st==0) for(int j=k;j<len;j++){ res[st]=str[j]; dfs(j+1,len,st+1,str); } else { int tmp; tmp=st; if(res[st-1]<str[k]){ //错误:res[st-1]写成str[st-1] // cout<<res[st-1]<<" "<<str[k]<<endl;//调试使用 res[st]=str[k]; tmp=st+1; } for(int j=k+1;j<=len;j++) //错误:j<len,这样j=len时就不会调用循环体中的语句 dfs(j,len,tmp,str); } } void main(){ char str[]="tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl"; int k,len=strlen(str); for(int i=0;i<len;i++){ k=0; for(int j=i+1;j<len;j++) if(str[j]==str[i]) k++; else str[j-k]=str[j]; str[len-k]=''; //cout<<i<<": "<<str<<endl; len=strlen(str); } cout<<str<<endl; dfs(0,len,0,str); }