男人心计 发表于 2011-5-8 02:02:25

生成随机字符串

估摸着以后极有可能使用到,于是写了一个生成随机字符串的函数。可以自定义生成规则,生成字符串长度。模仿了MS的函数风格,生成规则使用宏的或且规则,返回值使用了布尔型。这里使用布尔返回可能作用不大。直接贴代码吧,同样是两个文件。


RandomString.h
#pragma once

#define RdAllType                  0x07    //′óD?D′oíêy×?
#define RdNum                        0x01    //êy×?
#define RdLowercase            0x02    //D?D′
#define RdUppercase            0x04    //′óD′
static TCHAR szAllChar[] = _T("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");

bool fnRandomString(const int nLeng, TCHAR *RandStringInput, const int nType);




注释用了中文,插件粘贴对中文支持不好:

#define RdAllType                  0x07    //大小写和数字
#define RdNum                        0x01    //数字
#define RdLowercase            0x02    //小写
#define RdUppercase            0x04    //大写

RandomString.cpp
#include "stdafx.h"
#include "RandomString.h"
#include <stdlib.h>
#include <time.h>

bool fnRandomString(const int nLeng, TCHAR *RandStringInput, const int nType)
{
    if (0 == nLeng)
    {
      return true;
    }
    if (nLeng < 0)
    {
      return false;
    }

    srand((unsigned int)time(NULL));
    bool bRet = false;
    int nMin = 0;
    int nMax = 62;
    switch(nType & RdAllType)
    {
    case RdAllType:
      break;
    case RdNum:
      nMin = 52;
      break;
    case RdNum | RdLowercase:
      nMin = 26;
      break;
    case RdNum | RdUppercase:
      nMin = 26;
      break;
    case RdUppercase:
      nMax = 25;
      break;
    case RdUppercase | RdLowercase:
      nMax = 51;
      break;
    case RdLowercase:
      nMin = 26;
      nMax = 51;
      break;
    default:
      return false;
      break;
    }


    int nRange = nMax - nMin;
    if (nType == (RdNum | RdUppercase))
    {
      int nNum = 0;
      for (int t = 0; t <= nLeng; t++)
      {            
            nNum = nMin + rand()%nRange;
            if (nNum < 52)
            {
                nNum -= 26;
            }
            RandStringInput = szAllChar;
      }
    }
    else
    {
      for (int t = 0; t <= nLeng; t++)
      {            
            RandStringInput = szAllChar;
      }
    }

    //int tt = 0;
    //while (RandStringInput)
    //{
    //    printf("%c ", RandStringInput);
    //    tt++;
    //}

    return true;
}




VS2010下编译通过。

马大哈 发表于 2011-5-8 18:04:28

{:1_95:}支持一下!!

马大哈 发表于 2011-5-8 18:04:28

{:1_95:}支持一下!!

男人心计 发表于 2011-5-10 17:58:44

谢谢马队长。。
页: [1]
查看完整版本: 生成随机字符串