首页 > 编程语言 > 详细

[持续更新]——关于C++的一些可能会常用的函数

时间:2020-08-12 12:10:27      阅读:68      评论:0      收藏:0      [点我收藏+]

写在前面

这些函数都是我和朋友一点一点写出来的,可能部分代码会有点雷同,但大部分代码都是自我总结出来的。目前包含的函数功能分别是:

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;
        }
    }
}

 

[持续更新]——关于C++的一些可能会常用的函数

原文:https://www.cnblogs.com/TheAzureDeepSpace/p/13489804.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!