C++實現tab補全(Windows限定)
如何實現tab補全(Windows)
什麼是tab補全?
Windows的cmd可以通過dir
指令檢視當前目錄,然後可以嘗試點一下tab,發現會自動補全為當前目錄下的檔名。
那麼問題來了
C++自帶函式庫無法實現tab補全,因而如果你希望設定一些指令,讓使用者輸入指令的話,要輸入全部。因此要實現tab補全
tab補全需要實現的
開啟cmd,然後可以親手試一下…(本篇可能很長,可以用目錄跳過)
原本目錄裡有這些東西
輸入一個d後按tab,可以發現它利用關鍵字d跳過了.android等直接來到了Desktop
再次按下,發現關鍵字不是Desktop而是d,來到了Documents
(無圖)輸入a,再退格,發現關鍵字不再是d,如果有研究的話,發現關鍵字來到了Documents
這說明了tab補全的幾個內容:
- 通過當前關鍵字搜尋一些字串
- 搜尋完後不是立刻改變關鍵字,而是按下tab以外的鍵後
然後就是實現程式碼了
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<conio.h>
#include<cstring>
using namespace std;
/*int&const*/
string command;
/*tab*/
struct tab_key
{
string s;
}keyword[101];
string lastfind;int laststop;
string finding;
int totkey;
void add_key(string a);
void Init_tabing();
string tabing();
void getcom(string *s);
/*------*/
void Init_tabing()
{
keyword[1].s="create ";
keyword[2].s="exit ";
//樣例關鍵字
for(totkey=1;totkey<=100;++totkey)//統計關鍵字個數
{
if(keyword[totkey].s.empty())
{
--totkey;
break;
}
}
}
string tabing()
{
/*
string finding;
string lastfind;
*/
string error="error";
int i;
if(finding==lastfind)
{
i=laststop;
}
else i=1;
for(;i<=totkey;++i)
{
if(keyword[i].s.find(finding)<=100&&keyword[i].s.find(finding)>=0)
{
laststop=i+1;
lastfind=finding;
return keyword[i].s;
}
}
return error;
}
/*By:CSDN The_Dark_Archon*/
string getcom()
{
bool reset=1;
string output;
char tmp;
while(tmp!=13)
{
if(reset==1)
{
system("cls");
reset=0;
printf("E:\\Input>");
cout<<output;
}
else cout<<tmp;
tmp=getch();
if(tmp==9)
{
string tt=tabing();
if(tt!="error")
{
output=tt;
output.erase(output.end()-1);
}
reset=1;
}
else if(tmp==8)
{
if(output.empty()==false) output.erase(output.end()-1);
reset=1;
}
else
{
output+=tmp;
finding=output;
}
}
return output;
}
int main()
{
Init_tabing();
command=getcom();
cout<<"\nRunning "<<command<<endl;
return 0;
}
結果是成功實現了tab補全,當然和cmd有點差距,如按退格等會一閃一閃的,這個更新的cls有關,但是出了一閃一閃之外也沒有什麼Bug了。
這個模板112行lol
相關文章
- python-tab補全模組Python
- python之 自動補全 tabPython
- mac git命令按tab鍵自動補全MacGit
- 解決Kali Linux XFCE桌面Tab無法補全Linux
- C/C++ Qt Tree與Tab元件實現分頁選單C++QT元件
- C++ Qt開發:Tab與Tree元件實現分頁選單C++QT元件
- CentOS7無法使用Tab鍵補全命令的解決方法CentOS
- 新手必學的使用命令列實現tab鍵自動補全功能命令列
- 用CSS實現tab切換CSS
- c++筆記_const限定符C++筆記
- 微信小程式自定義tab,多層tab巢狀實現微信小程式巢狀
- 用純css實現Tab切換CSS
- 利用jQuery實現Tab選項卡jQuery
- C++ concurrency::task實現非同步程式設計(WindowsC++非同步程式設計Windows
- 純CSS實現Tab欄的切換CSS
- 用CSS實現Tab頁切換效果CSS
- HarmonyOS NEXT應用開發之Tab元件實現增刪Tab標籤元件
- Vue路由+Tab元件實現多頁籤功能Vue路由元件
- javascript實現tab切換的四種方法JavaScript
- Flutter仿頭條頂部tab切換實現Flutter
- html兩種方法來實現tab切換效果HTML
- Qt:透過QCompleter類提供的補全框completion box, 根據使用者輸入的內容提供可能的補全選項實現自動補全功能QT
- [C++]實現memcpyC++memcpy
- Vue.js 實現的 3D Tab選單Vue.js3D
- Redis 實戰 —— 08. 實現自動補全、分散式鎖和計數訊號量Redis分散式
- JavaScript 重點補全JavaScript
- vue 實現tab切換動態載入不同的元件Vue元件
- Blazor如何實現類似於微信的Tab切換?Blazor
- 堆排序(實現c++)排序C++
- 命令模式(c++實現)模式C++
- LinkBlockedQueue的c++實現BloCC++
- 堆排序c++實現排序C++
- c++實現Json庫C++JSON
- android Material Design 學習之十:底部Tab的兩種實現AndroidMaterial Design
- HarmonyOS NEXT應用開發—自定義檢視實現Tab效果
- Angular 使用 RouteReuseStrategy (路由複用策略) 實現後臺 TAB 標籤Angular路由
- mac git 自動補全MacGit
- pycharm 如何自動補全PyCharm
- kubectl的自動補全