C++ Tab键实现自动补全输入功能
作者:网络转载 发布时间:[ 2014/3/27 10:07:49 ] 推荐标签:C++ Tab
一、简介
由于项目中写了个测试的控制台程序,是每次读取一行,即通过getline()来实现的,所以每次必须输入全路径名称,才能实现运行。
大家都觉得麻烦,写了个tab键自动选择补全的。
目前基本可实现功能,但是没有回退的功能和跳出循环,有需用的自己改吧。
此程序基于windows的控制台实现的。
二、实现过程
1.代码自我感觉还算清楚。里面有部分注释。
#include<stdio.h>
#include<string>
#include<conio.h>
#include<map>
usingnamespacestd;
#include<windows.h>
#include<stdlib.h>
#include<wincon.h>
//tab键获取相关值,并打印到屏幕上。
voidtab_find_char(std::map<int,char*>store_compare_,char*store_input,inti_store_input_count,int&tab_count);
//从字符中找到相关字符,并返回相关字符。
char*get_attach(constchar*stacks_,constchar*needle_);
voidconsole_start();
voidconsole_end();
voidwrite(constchar*message,intlength);
voidwrite(constchar*message);
voidread(char*buffer,size_tsize);
#include<iostream>
#include"conio.h"
//记录屏幕光标位置
staticCOORDcurser_position;
voidmain()
{
console_start();
//自定义的可搜索库字符集
staticstd::map<int,char*>store_compare;
store_compare[0]="thread_parameter_";
store_compare[1]="parameter_";
store_compare[2]="build";
store_compare[3]="compile";
intcount=0;
charch;
while(true)
{
inttab_count=0;
charstore_input[256];
inti_store_input_count=0;
//记录光标位置
HANDLEhOut;
CONSOLE_SCREEN_BUFFER_INFObInfo;
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hOut,&bInfo);
curser_position.X=bInfo.dwCursorPosition.X;
curser_position.Y=bInfo.dwCursorPosition.Y;
do
{
ch=(char)_getch();
if(ch!='
')
{
if(ch=='q')
{
break;
}
elseif(ch==9)
{
tab_find_char(store_compare,store_input,i_store_input_count,tab_count);
tab_count++;
}
//接受数字和全部字母和部分特殊符号。
elseif((ch>=48&&ch<=57)||(ch>=65&&ch<=122))
{
char*temp_char=newchar[1];
temp_char[0]=ch;
write(temp_char,1);
store_input[i_store_input_count]=ch;
i_store_input_count++;
}
}
}
while(ch!='
');
write("
");
}
console_end();
}
voidtab_find_char(std::map<int,char*>store_compare_,char*store_input,inti_store_input_count,int&tab_count)
{
if(i_store_input_count<0||tab_count<0)
{
return;
}
intmap_size=store_compare_.size();
tab_count=tab_count%map_size;
i_store_input_count+=1;
store_input[i_store_input_count-1]='