怎么样实现(路由器)命令行的智能匹配?
例如:
有如下命令
net user
net start
net stpaset
display acl
display mac-mode
display mac-pv
要求:
在命令行下只要输入
net u
后按一个tab键或者是空格、回车键就能自动将net user显示出来
输入
display ma
后由于有二条命令
display mac-mode
display mac-pv
与之匹配,只显示能区分的部分
即按一个tab键或者是空格、回车键就能自动将display mac-(即前面相同的部分显示出来)
输入
display ma后如果按一下 "? "键则
可以自动找到以下二条命令
display mac-mode
display mac-pv
也就是一般路由器命令行智能匹配功能!
[解决办法]
以 net user
net start
net stpaset
为例,建成的树就是
net
|--------------|
user st
|------|
art paset
[解决办法]
实现那棵前缀树(即trie树)有那么麻烦吗?当然如果就那么五六个命令的话,全部现匹配就成,但是如果有上千个命令的话,还是用trie树查找起来比较快和方便吧?
生成树的算法就是:
首先生成一个根节点 net user
然后读入第二个串net start,开始匹配,于是那个根节点分裂成:
net
|------------|
user start
再读入第三个串net stpaset,从根节点开始走,走到右子节点,于是右子节点再分裂就成前缀树。
net
|------------|
user st
|-----------|
art paset
如果再有n star的话,则树就分裂成
n
|------------------------|
et star
|------------|
user st
|-----------|
art paset
此外,可以在star user st节点处做些处理,即如果用户多打了几个空格,也不影响。