首页 > 其他 > 详细

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

时间:2021-06-06 21:22:02      阅读:23      评论:0      收藏:0      [点我收藏+]
#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);
    
}

 

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

原文:https://www.cnblogs.com/ewitt/p/14856031.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!