最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++多線程實現(xiàn)電子詞典

 更新時間:2019年03月20日 10:55:02   作者:Cosmop01itan  
這篇文章主要為大家詳細(xì)介紹了C++多線程實現(xiàn)電子詞典,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++多線程實現(xiàn)電子詞典的具體代碼,供大家參考,具體內(nèi)容如下

// Dictionary.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。
//vs2013編譯
//字典文件:https://pan.baidu.com/s/1YHtwptaq_V8j034U9_J96A
#include "stdafx.h"
#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <fstream>
#include <io.h>
#include <thread>
#include <time.h>
#include <Windows.h>
using namespace std;

class ParseDirectory
{
public:
 ParseDirectory(string path){
 this->path = path;
 getFiles(files);
 isdone = false;
 t = thread(&ParseDirectory::txtToDic, this);
 //t.join();
 }
 bool isDone()
 {
 return isdone;
 }
 map<string, string> getDic()
 {
 return vecDics;
 }
 virtual ~ParseDirectory()
 {

 }

private:
 vector<string> files;
 string path;
 thread t;
 map<string, string> vecDics;
 bool isdone;
 void getFiles(vector<string>& files)
 {
 //文件句柄
 long  hFile = 0;
 //文件信息
 struct _finddata_t fileinfo;
 string p;
 if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
 {
  do
  {
  //如果是目錄,迭代之
  if ((fileinfo.attrib & _A_SUBDIR))
  {
   //if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
   //getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
   continue;
  }
  else
  {
   files.push_back(p.assign(path).append("\\").append(fileinfo.name));
  }
  } while (_findnext(hFile, &fileinfo) == 0);
  _findclose(hFile);
 }
 }
 void txtToDic()
 {
 for each (string file in files)
 {
  fstream f(file);
  string word, explain;
  //map<string, string> dic;
  
  if (f.is_open())
  {
  //cout << file << endl;
  while (1)
  {
   
   getline(f, word);
   if (!getline(f, explain))
   break;
   vecDics[word] = explain;
  }
  }
  f.close();
  //vecDics.push_back(dic);
 }
 
 //cout << vecDics.size() << endl;
 isdone = true;
 
 }
};
void setColor(unsigned short ForeColor = 2, unsigned short BackGroundColor = 0)

{

 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//獲取當(dāng)前窗口句柄

 SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//設(shè)置顏色

}
int _tmain(int argc, _TCHAR* argv[])
{
 
 
 vector<ParseDirectory*> pds;
 cout << "正在加載資源...";
 long start = clock();
 vector<map<string, string> > allWords;
 for (int i = 0; i < 26; i++)
 {
 string name = ".\\";
 name += 'A' + i;
 pds.push_back(new ParseDirectory(name));
 }
 int cnt = 0;
 
 for (int i = 0; i < pds.size(); i++)
 {
 if (pds[i]->isDone())
 {
  cnt++;
  allWords.push_back(pds[i]->getDic());
  Sleep(300);
 }
 if (cnt == pds.size())
  break;
 }
 system("cls");
 cout << "加載完成!" << "耗時:" << (clock()-start)/1000.0 << "s" << endl;
 cout << allWords.size();
 string inquir;
 while (1)
 {
 bool flag = false;
 setColor();
 cout << "\n輸入要查詢的單詞:";
 setColor(7, 0);
 cin >> inquir;
 for (int i = 0; i < allWords.size(); i++)
 {
  auto t = allWords[i][inquir];
  if (t.size())
  {
  
  cout << t << endl;
  flag=true;
  }
 }
 if (!flag)
 {
  setColor(4, 0);
  cout << "抱歉,未找到單詞" << endl;
 }
 }

 
 system("pause");
 return 0;
}

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Qt重寫QTreeView自繪實現(xiàn)酷炫樣式

    Qt重寫QTreeView自繪實現(xiàn)酷炫樣式

    QTreeView,顧名思義,就是一種樹形的控件,在我們需要做類似于文件列表的視圖時,是一個不錯的選擇,下面我們就來看看qt如何重寫QTreeView實現(xiàn)酷炫樣式,感興趣的可以了解一下
    2023-08-08
  • C語言中的文件操作詳解

    C語言中的文件操作詳解

    這篇文章主要介紹了C語言中的文件操作詳解,使用文件可以將數(shù)據(jù)直接存放到電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2022-07-07
  • C++中使用mutable關(guān)鍵字的場景分析

    C++中使用mutable關(guān)鍵字的場景分析

    C++中的mutable關(guān)鍵字用于修飾類的成員變量,使其在const成員函數(shù)中可以被修改,它主要用于緩存、線程同步和調(diào)試等場景,以支持對象的邏輯常量性,在使用mutable時,應(yīng)確保其修改不會破壞對象的外部表現(xiàn)狀態(tài),本文介紹C++中使用mutable關(guān)鍵字的場景分析,感興趣的朋友一起看看吧
    2025-02-02
  • C語言實現(xiàn)磁盤映射

    C語言實現(xiàn)磁盤映射

    磁盤映射技術(shù)通過將文件映射到內(nèi)存中,提高了文件操作的效率,本文就來介紹一下C語言實現(xiàn)磁盤映射,感興趣的可以了解一下
    2024-09-09
  • 一篇文章帶你入門C語言:數(shù)組

    一篇文章帶你入門C語言:數(shù)組

    這篇文章主要介紹了C語言中數(shù)組的一些基本知識小結(jié),其中重點(diǎn)是對于數(shù)組的內(nèi)存分配相關(guān)方面的知識整理,需要的朋友可以參考下
    2021-08-08
  • C++容器算法示例詳解

    C++容器算法示例詳解

    在談到容器算法,我們大概率會用到謂詞predicate,謂詞返回的類型是布爾類型(bool)可以是lambda表達(dá)式、函數(shù)對象以及其它可調(diào)用的對象,這篇文章主要介紹了C++容器算法,需要的朋友可以參考下
    2024-08-08
  • c語言中assert斷言用法實例詳解

    c語言中assert斷言用法實例詳解

    斷言是C語言中一種用于檢查程序中假設(shè)語句正確性的方法,通過使用斷言,開發(fā)人員可以在程序中插入一些條件,以確保程序的執(zhí)行滿足特定的預(yù)期,這篇文章主要給大家介紹了關(guān)于c語言中assert斷言用法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • C++ 模版雙向鏈表的實現(xiàn)詳解

    C++ 模版雙向鏈表的實現(xiàn)詳解

    本篇文章是對C++中的模版雙向鏈表進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ Easylogging++日志庫配置使用超詳細(xì)講解

    C++ Easylogging++日志庫配置使用超詳細(xì)講解

    這篇文章主要介紹了C++ Easylogging++日志庫配置使用,Easylogging++是用于C++應(yīng)用程序的單頭高效日志庫。它非常強(qiáng)大,高度可擴(kuò)展并且可以根據(jù)用戶的要求進(jìn)行配置
    2022-11-11

最新評論

南江县| 吉木萨尔县| 榆树市| 江口县| 东光县| 邵阳市| 伊金霍洛旗| 东莞市| 德惠市| 张家川| 孙吴县| 英德市| 玉山县| 武夷山市| 龙游县| 石泉县| 连江县| 油尖旺区| 贡觉县| 金川县| 宜兰市| 垦利县| 云龙县| 周口市| 香河县| 海丰县| 平陆县| 延津县| 琼中| 隆安县| 久治县| 腾冲县| 中阳县| 清河县| 惠东县| 德阳市| 渑池县| 铜梁县| 枞阳县| 定州市| 子长县|