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
就可以了.
这里前动作
中前面
和后面
代码不一样.加上递归
,递归时最后归不回来,要单独写最后
代码.
还有,按序与按位
的序列
变化是不一样的.
前面代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现