寫在前面
這些函式都是我和朋友一點一點寫出來的,可能部分程式碼會有點雷同,但大部分程式碼都是自我總結出來的。目前包含的函式功能分別是:
1、設定控制檯顏色
2、設定控制檯游標位置
3、隱藏控制檯游標
4、判斷質數(也是夠無聊的)
5、最小因數
6、快速讀入int型
7、快速讀入string型
8、判斷按鍵是否按下(可以根據上面的VK值來對號入座,滑鼠點選等自行百度)
9、獲得兩個字串的最長公共字串
10、說明文件(或許沒用?)
上程式碼!
#include <windows.h> #include <iostream> #include <cstdio> #include <conio.h> #include <cmath> #include <sstream> #define VK_0 0x30 #define VK_1 0x31 #define VK_2 0x32 #define VK_3 0x33 #define VK_4 0x34 #define VK_5 0x35 #define VK_6 0x36 #define VK_7 0x37 #define VK_8 0x38 #define VK_9 0x39 //定義資料字元A~Z #define VK_A 0x41 #define VK_B 0x42 #define VK_C 0x43 #define VK_D 0x44 #define VK_E 0x45 #define VK_F 0x46 #define VK_G 0x47 #define VK_H 0x48 #define VK_I 0x49 #define VK_J 0x4A #define VK_K 0x4B #define VK_L 0x4C #define VK_M 0x4D #define VK_N 0x4E #define VK_O 0x4F #define VK_P 0x50 #define VK_Q 0x51 #define VK_R 0x52 #define VK_S 0x53 #define VK_T 0x54 #define VK_U 0x55 #define VK_V 0x56 #define VK_W 0x57 #define VK_X 0x58 #define VK_Y 0x59 #define VK_Z 0x5A //定義資料字元a~z #define VK_a 0x61 #define VK_b 0x62 #define VK_c 0x63 #define VK_d 0x64 #define VK_e 0x65 #define VK_f 0x66 #define VK_g 0x67 #define VK_h 0x68 #define VK_i 0x69 #define VK_j 0x6A #define VK_k 0x6B #define VK_l 0x6C #define VK_m 0x6D #define VK_n 0x6E #define VK_o 0x6F #define VK_p 0x70 #define VK_q 0x71 #define VK_r 0x72 #define VK_s 0x73 #define VK_t 0x74 #define VK_u 0x75 #define VK_v 0x76 #define VK_w 0x77 #define VK_x 0x78 #define VK_y 0x79 #define VK_z 0x7A using namespace std; /* 製作於2020.6.29 目前版本:1.5 日誌: 2020.8.11:1.5 加入鍵盤偵測函式(就是把傻逼微軟的函式寫短了一點) ,和獲得最長公共子串的函式LongSubstring 2020.8.10:1.4 加入快速讀入函式 2020.7.31:1.3 加入Prime和Factor函式 2020.7.27:1.2 重置名字,採用駝峰命名法 2020.6.29:1.0 包含設定color和設定游標位置的函式 */ namespace tool { /*** 設定顏色 ***/ void SetColor(unsigned short ForeColor = 7,unsigned short BackGroundColor = 0) { HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16)); } /*** 顏色幫助 ***/ void HelpColor() { for (int i = 0;i <= 15;i++) { SetColor(i, 0); cout << i << endl; } } /*** 設定游標 ***/ int SetPos(int posx, int posy) { COORD pos = {posx,posy}; HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hCon, pos); return 0; } /*** 隱藏游標 ***/ void Hide() { CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } /*** 判斷質數 ***/ bool Prime(unsigned long long s) { if (s == 2) return true; if (s % 2 == 0) return false; for (int i = 3;i <= sqrt(s) + 1;i += 2) { if (s % i == 0) return false; } return true; } /*** 最小因數 ***/ unsigned long long Factor(unsigned long long s) { for (int i = 2;i <= s;i++) { if (s % i == 0) return i; } } /*** 快讀整數 ***/ inline int IntRead()//行內函數稍微快一點點 { char ch = getchar(); int s = 0, w = 1; while(ch < '0' || ch > '9') { if(ch == '-') w = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { s = s * 10 + ch - '0', ch = getchar(); } return s * w; } /*** 快讀字串 ***/ inline string StringRead(int ch = 0) { string str; char s = getchar(); while ((ch == 0 && (s == ' ' || s == '\n' || s == '\r')) || (ch == 1 && (s == '\n' || s == '\r'))) { s = getchar(); } while ((ch == 0 && s != ' ' && s != '\n' && s != '\r') || (ch == 1 && s != '\n' && s != '\r')) { str += s; s = getchar(); } return str; } /*** 偵測按鍵 ***/ bool KeyDown(int VK_NOW) { return (GetAsyncKeyState(VK_NOW) & 0x8000) ? true : false; } /*** 共子串長 ***/ int LongSubstring(string a, string b) { int lena = a.length(), lenb = b.length(), ans[lena][lenb], Ans = 0; memset(ans, 0, sizeof(ans)); for (int i = 0;i < lena;i++) { for (int j = 0;j < lenb;j++) { if (a[i] == b[j]) { ans[i][j] = (i == 0 || j == 0 ? 1 : 1 + ans[i - 1][j - 1]), Ans = max(ans[i][j], Ans); } } } return Ans; } /*** 說明文件 ***/ void Help() { const int SIZE = 100000; const string function[SIZE][2] = { "SetColor", "用於設定顏色\n格式 SetColor(字型顏色, 背景色)\n常用顏色:0 黑 10 綠 12 紅 15 白", "SetPos", "用於設定游標位置\n格式 SetPos(游標x座標, 游標y座標)", "Hide", "隱藏游標\n格式 Hide()", "Prime", "判斷一個數是不是質數,如果是則返回true,不是返回false\n格式 Prime(數字)", "Factor", "獲得一個正整數除了1以外的最小因數\n格式 Factor(數字)", "IntRead", "快速讀入一個整數\n格式 整數型 = IntRead()", "StringRead", "快速讀入一個string字串\n格式 字串 = StringRead(是1就讀整行,預設0)", "KeyDown", "判斷按鍵是否按下,例如KeyDown(VK_s)判斷小寫s是否按下\n格式 KeyDown(VK值),返回布林值", "Similarity", "這個函式用來判斷兩個字串最長公共子串\n格式 LongSubstring(字串1, 字串2)", "NONE", "" //請保持在最後 }; cout << "tool.h庫" << endl<< "查詢:(exit退出)" << endl << "SetColor" << endl << "SetPos" << endl << "Hide" << endl << "Prime" << endl << "Factor" << endl << "IntRead" << endl << "StringRead" << endl << "KeyDown" << endl << "LongSubstring" << endl; string help; bool X = false; while (1) { cin >> help; if (help == "exit") return; else { for (int i = 0;function[i][0] != "NONE" && !X;i++) { if (function[i][0] == help) { cout << function[i][1] << endl; X = true; } } } if (X == false) { int l = 0, s = 0; for (int i = 0;function[i][0] != "NONE";i++) { int k = LongSubstring(function[i][0], help); //如果更加相似 if (k > l) { //記錄索引和長度 l = k, s = i; } } cout << "這個函式我們並沒有。" << endl; if (l >= help.length() / 3) //如果相似度達50%以上 { cout << "那麼是" << function[s][0] << "函式嗎?" << endl; } } cout << "還有什麼需要的嗎?" << endl; } } }