c++按序或位分串2

构 位序串{<整 I>静 空 后面(&a,&s){s=a.子串(I);}<极 位=0,整 P,整 Q>静 空 前面(&a,&s){
        如 常式(){s=a.子串(P,Q);}{s=a.子串(P,Q-P);}
    }
};//通过构中的模板函数来实现动作.<极 位=0,类 M,整 P,类 F,类 S>
空 前动作(F&a,序列<P>b,S&s){M::后面<P>(a,s);}<极 位,整 P,整 Q>常式 整 首序(){
    如 常式()(P+Q);异 中 Q;
}//按位,首序为P+Q,按序,直接为Q.<极 位,类 M,整 P,整 Q,...I,类 F,类 S,...T>
空 前动作(F&a,序列<P,Q,I...>b,S&s,T&...t){
    M::前面<,P,Q>(a,s);
    静 常式 整 W=首序<,P,Q>();//首位.
    前动作<,M>(a,序列<W,I...>(),t...);
}//这是递归.<极 位=1,...I,串类...T>
空 位序分(&a,序列<I...>,T&...t){
    静 常式 整 M=型长...(I),N=型长...(T);
    断定(M+1==N,"要求无0及大小");
    静 常式 动 e=序列<0,I...>();
    前动作<,位序串>(a,e,t...);
}//分的是串.

空 主(){
    串 a{"344666455533444"},b,c,d,e;
    //位序分(a,序列<3,2,4>(),b,c,d,e);
    位序分<1>(a,序列<3,2,4>(),b,c,d,e);
    打印(b,c,d,e);
    位序分<0>(a,序列<3,4,11>(),b,c,d,e);
    打印(b,c,d,e);
}

这里的经验有:可以通过来转移模板参数的推导.把函数放在中.这样,直接在模板函数中写M就可以了.
这里前动作前面后面代码不一样.加上递归,递归时最后归不回来,要单独写最后代码.
还有,按序与按位序列变化是不一样的.
前面代码

posted @ 2022-06-28 17:46  zjh6  阅读(16)  评论(0)    收藏  举报  来源