这些函数都是我和朋友一点一点写出来的,可能部分代码会有点雷同,但大部分代码都是自我总结出来的。目前包含的函数功能分别是:
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; } } }
原文:https://www.cnblogs.com/TheAzureDeepSpace/p/13489804.html