我正在试图弄清楚如何在C ++应用程序中实现子命令的Tab键完成。我希望它的功能与Git的标签完成非常相似。我正在通过Git的来源徘徊,但它并没有向我跳出来。
我已经搜索了实现制表符完成的方法,但没有找到直截了当的答案,所以我猜它可能不一定是每个应用程序必须实现的功能。制表符完成是应用程序正在执行的特定shell的功能吗?关于让我的应用程序支持制表符完成(特别是在C ++中),我需要了解哪些基础知识?
答案 0 :(得分:4)
评论中回答了这个问题。
选项卡完成是否正在执行应用程序的特定shell的功能?
是强>
关于让我的应用程序支持制表符完成(尤其是在C ++中),我需要了解哪些基础知识?
基本上了解有关bash-completion
的更多信息
答案 1 :(得分:1)
我已经搜索了实现制表符完成的方法,但没有找到 简单答案
查看代码here。这应该为您提供一个很好的起点。
关于将我的应用程序移植到哪些方面,我需要了解哪些基本知识? 支持标签页完成
您应该熟悉Trie数据结构,因为这是用于实现制表符完成的常用数据结构。有很多在线解释它的教程,请查阅。
伪代码(给出字符串列表):
对于列表中的每个字符串,将其字符存储在Trie数据结构中。
当用户按下Tab键时:
(GeeksForGeeks) 给定查询前缀,我们将搜索所有具有此查询的单词。
- 使用标准Trie搜索算法搜索给定查询。
- 如果查询前缀本身不存在,请返回-1表示相同。
- 如果查询存在并且在Trie中是单词结尾,请打印查询。可以通过查看最后一个匹配节点是否具有isEndWord标志来快速检查 组。我们在Trie中使用此标志来标记单词节点的结尾,以达到以下目的: 搜索。
- 如果查询的最后一个匹配节点没有子节点,则返回。
- 其他递归地打印最后一个匹配节点的子树下的所有节点。