当前位置:C++技术网 > 资讯 > C++实现指定长度来生成随机字符串的功能

C++实现指定长度来生成随机字符串的功能

更新时间:2018-07-09 17:12:26浏览次数:1+次

    悯农
    春种一粒粟,
    秋收万颗子。
    四海无闲田,
    农夫犹饿死。
    好有感觉的诗,想想自己,好像陷入了思索。。。
    不对,不对,今天不是来吟诗作对的,是带有任务的,不然地主得打死我的!!!
    好了,今天的任务是用C++实现指定长度来生成随机字符串的功能,字符串分为纯数字字符串、纯小写字母字符串和纯大写字母字符串。至于更多功能,就不在今天的代码里涉及啦。
    为了能够吃好一顿饱饭,现在必须开始工作了。码农,好心酸的哟。
    随机数的函数有srand和rand,分别是种种子和产生随机数。种种子我们选用公正的时间种子,所以使用time.h。
    代码如下:
#include <iostream>
using namespace std;
#include <time.h>
string get_rand_str(int len, int mode = 0)
{
    char base;
    int range;
    //选择一亩田,准备耕种。选择随机模式:纯数字随机字符串、小写字母随机字符串和大写字母随机字符串
    switch (mode)
    {
    case 0:
    {
        base = '0';
        range = 10;
        break;
    }
    case 1:
    {
        base = 'a';
        range = 26;
        break;
    }
    case 2:
    {
        base = 'A';
        range = 26;
        break;
    }
    }
    len++;
    srand((int)time(0));//种下一颗种子,等待发芽
    unsigned char * p = new unsigned char[len];//开垦一块荒地
    memset(p, 0, len);//松好土
    for (int i = 0; i < len - 1; i++)//开始播种和灌溉成长
    {
        p[i] = (unsigned char)(base + (rand() % range));
    }
    string str((char*)p);//收割丰收的果实
    delete p;//清理地块
    return str;//背回果实到家,完毕
}

    功能细节,代码都有注释了。需要说明的是,我们是指定长度来生成随机数的,所以我们需要预先分配内存,而不能固定一个数字大小。有了内存分配,我们就需要释放。
    为了最后能够顺利的将结果背回家,我们将果实打包给string对象,再将string对象传回。千万不要直接传指针。因为这样你要处理好内存的释放,如果在函数外释放内存,就让内存管理变得不方便,最好是在一个地方处理完毕,以免产生内存泄漏。
    我们代码里添加了类型强制转换,是因为VS2017限制比较严格,我们就主动进行类型转换,以免警告。
    好了,就说到这吧。继续码代码了,码农的生活,真精彩哈~~~