从字符串某位置开始的递增串(dfs)注意for循环中下标的错误

#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]='\0';
        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]='\0';
        //cout<<i<<":  "<<str<<endl;
        len=strlen(str);
    }
    cout<<str<<endl;
    dfs(0,len,0,str);
    
}

 

posted on 2021-06-06 18:36  ewitt  阅读(55)  评论(0)    收藏  举报

导航