C++ 字符串比较的一下方法

C++ 字符串比较的一下方法

字符串比较是否包含

 bool canConstruct(std::string ransomNote, std::string magazine)
    {   //字符串等长情况
        int magazineLength =magazine.length();
        int ransomNoteLength =ransomNote.length();
        if(magazineLength == ransomNoteLength){
            for (size_t i = 0; i < ransomNoteLength; i++)
            {
                if(magazine[i]!=ransomNote[i]){
                   return false;
                }
            }
            return true;
        }

        if (magazineLength > ransomNoteLength)
        {
            int temp= 0;
             for (size_t i = 0; i < magazineLength; i++)
            { 
                if(magazine[i]==ransomNote[temp]){
                    temp++;
                }else{
                    temp = 0;
                }
                if(temp==ransomNoteLength){
                    return true;
                }
            }
        }
        return false;
    }

WH小于 1 分钟cpp
cmake 命令详解

cmake 命令详解

Cmake命令行使用:

-G 指明生成的Makefile 的生成器
-D 添加参数
-S 指明源码位置
-B 指明输出路径
-A 指定系统架构
-U 标志可用于取消设置变量

WH大约 3 分钟系统配置cppCMake
vcpkg+CLion+cmake+MinGW使用

vcpkg+CLion+cmake+MinGW使用

vcpkg介绍

vcpkg 是用于 C++ 的一种命令行包管理器。 它极大地简化了 Windows、Linux 和 macOS 上第三方库的购置与安装。 如果项目要使用第三方库,建议通过 vcpkg 来安装它们。 vcpkg 同时支持开源和专有库。 已测试 vcpkg Windows 目录中所有库与 Visual Studio 2015、Visual Studio 2017 及 Visual Studio 2019 的兼容性。 在 Windows 和 Linux/macOS 目录之间,vcpkg 现已支持超过 1900 个库。 C++ 社区正在不断向两个目录添加更多的库。


WH大约 2 分钟系统配置cppCMakevcpkgCLion
c++ 能重载的操作符有那些

c++ 能重载的操作符有那些

重载操作符是指重新定义C++中已有运算符的含义。常见的重载操作符有:

算术运算符: +, -, *, /, %
关系运算符: ==, !=, >, <, >=, <=
逻辑运算符: &&, ||, !
赋值运算符: =
位运算符: &, |, ^, ~, <<, >>
自增/自减运算符: ++, --
成员访问运算符: ->, .
下标运算符: [ ]
函数调用运算符: ( )
转型运算符: (type)
new 和 delete 运算符: new, delete, new[], delete[]
另外还有三个特殊的运算符是可以被重载的:
复合赋值运算符: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
串联运算符: <<, >>
逗号运算符: ,

WH小于 1 分钟系统配置cpp操作符重载
c++ 不规范初始化时,出现的一系列奇怪问题解决(引发了异常 读取访问权限冲突)

c++ 不规范初始化时,出现的一系列奇怪问题解决(引发了异常 读取访问权限冲突)

今天公司的c++ 项目,需要加一下小功能,读取配置,控制业务功能开启

问题原因

这是有一段main 方法内的代码块 nacos 初始化并注册的代码

    nacos::Nacos nacos(GetIpAddress().value(), PORT, NACOS_APPNAME);
    nacos.namespaceId = NACOS_NAMESPACEID;
    nacos::NacosClient cli(&nacos);
    cli.registerNacos();

WH大约 2 分钟cpp初始化问题
C++实现AES加解密算法

C++实现AES加解密算法

AES 头文件

CAES.h

#pragma once

class CAES
{
public:
    CAES(const char* key);
    virtual ~CAES();

    /**
     * 加密
     * @param in 输入加密数据
     * @param inlen 输入加密数据长度
     * @param outlen 输出加密后数据长度
     * @param fill 如果不是16的整数倍,是否用0值补全。 true:用0值补全, false:用xor加密多余的数据
     * @return 返回加密后数据
     */
    void* Encrypt(void* in, int inlen, int& outlen, bool fill = false); 

    /**
     * 解密
     * @param in 输入解密数据
     * @param inlen 输入解密数据长度
     * @param outlen 输出解密后数据长度
     * @return 返回解密后数据
     */
    void* Decrypt(void* in, int inlen, int& outlen);

private:
    // S 盒变换
    unsigned char Sbox[256];
    // 逆 S 盒变换
    unsigned char InvSbox[256];
    // 密钥
    unsigned char w[11][4][4];

private:
    /**
     * 密钥扩展函数 - 对128位密钥进行扩展得到 w[11][4][4]
     * @param key 16位密钥
     */
    void KeyExpansion(const char* key);

    /**
     * 异或加解密
     * @param in 加解密输入数据
     * @param len 加解密输入数据长度
     */
    void Xor(unsigned char* in, int len);

    /**
     * 加密,传入的数组大小必须是16字节
     * @param data 加密数据
     */
    void Encrypt(unsigned char* data);

    /**
     * 解密,传入的数组也必须是16字节
     * @param data 解密数据
     */
    void Decrypt(unsigned char* data);

    /**
     * S 盒变换
     * @param state 变换数据
     */
    void SubBytes(unsigned char state[][4]);

    /**
     * 行变换
     * @param state 变换数据
     */
    void ShiftRows(unsigned char state[][4]);

    /**
     * 列变换
     * @param state 变换数据
     */
    void MixColumns(unsigned char state[][4]);

    /**
     * 与扩展密钥的异或
     * @param state 变换数据
     */
    void AddRoundKey(unsigned char state[][4], unsigned char k[][4]);

    /**
     * 逆 S 盒变换
     * @param state 变换数据
     */
    void InvSubBytes(unsigned char state[][4]);

    /**
     * 逆行变换
     * @param state 变换数据
     */
    void InvShiftRows(unsigned char state[][4]);

    /**
     * 逆列变换
     * @param state 变换数据
     */
    void InvMixColumns(unsigned char state[][4]);
};


WH大约 13 分钟cpp