首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

如何样实现(路由器)命令行的智能匹配

2012-02-27 
怎么样实现(路由器)命令行的智能匹配?例如:有如下命令netusernetstartnetstpasetdisplayacldisplaymac-mod

怎么样实现(路由器)命令行的智能匹配?
例如:
有如下命令
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节点处做些处理,即如果用户多打了几个空格,也不影响。

热点排行