穷举字符串的一种算法

前段时间想暴力破解一个KEY,希望穷举所有字符串,于是写出了一段穷举字符串的代码,供大家参考。算法思想参考了10进制数加1的操作,代码如下:

#define CHAR_HEAD 'a'  // 0x20
#define CHAR_TAIL 'z'  // 0x7E

 

// 字符串加1
void StrAdd1(char* pStr)
{
    char szStr[1024] = {0};
    strcpy(szStr, pStr);
    int nP = strlen(szStr)-1;
    if (szStr[nP] == CHAR_TAIL)
    {
        szStr[nP] = CHAR_HEAD;
        int i = 1;
        if (nP-i < 0)
        {
            char *pTmp = new char[nP+3];
            memset(pTmp, 0, nP+3);
            pTmp[0] = CHAR_HEAD;
            strcat(pTmp, szStr);
            strcpy(szStr, pTmp);
            delete[] pTmp;
            strcpy(pStr, szStr);
            return;
        }
        while (szStr[nP-i] == CHAR_TAIL)
        {
            szStr[nP-i] = CHAR_HEAD;
            i++;
            if (nP-i < 0)
            {
                char *pTmp = new char[nP+3];
                memset(pTmp, 0, nP+3);
                pTmp[0] = CHAR_HEAD;
                strcat(pTmp, szStr);
                strcpy(szStr, pTmp);
                delete[] pTmp;
                strcpy(pStr, szStr);
                return;
            }
        }
        szStr[nP-i]++;
        strcpy(pStr, szStr);
        return;
    }
    szStr[nP]++;
    strcpy(pStr, szStr);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值