设为首页 加入收藏

TOP

C++Tab键实现自动补全输入功能(一)
2014-04-06 17:34:46 来源: 作者: 【 】 浏览:221
Tags: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 ="parameter_";

  store_compare ="build";

  store_compare ="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 ;

  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++)

  {

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇线性表链式存储C++实现 下一篇LRU缓存算法 - C++版

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)