C++ Tab键实现自动补全输入功能

发表于:2014-3-27 09:58

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cartzhang    来源:51Testing软件测试网采编

  一、简介
  由于项目中写了个测试的控制台程序,是每次读取一行,即通过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!='\n')
{
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!='\r');
write("\n");
}
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]='\0';
char*pri_temp_input=newchar[i_store_input_count];
strncpy(pri_temp_input,store_input,i_store_input_count);
inti_catch_times=0;
HANDLEhOut;
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
for(inti=0;i<map_size;i++)
{
char*pri_get_supply=get_attach(store_compare_[i],pri_temp_input);
if(NULL!=pri_get_supply)
{
if(tab_count>i_catch_times)
{
i_catch_times++;
continue;
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号