首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >给定区间内的随机字符串

给定区间内的随机字符串
EN

Stack Overflow用户
提问于 2019-05-20 07:25:51
回答 2查看 0关注 0票数 0

我想用这个签名创建一个函数

代码语言:javascript
复制
char *generateString(char *par1, char *par2);

结果应该是一个严格大于par1(与之比较strcmp)并严格低于的字符串par2。Par1和par2的随机长度介于0和MAX之间。

每个字符在[INF,SUP]间隔之间选择。(参数是由这些字符组成的字符串)。

字符串长度有限,但在0和某个MAX值之间也是随机的。

编码似乎很难,任何人都可以提供帮助?

EN

回答 2

Stack Overflow用户

发布于 2019-05-20 16:07:33

首先,您必须使用strlen函数检查输入字符串大小。如果输入无效,则创建一个长度为0的空字符串(这意味着大小为1的char数组,其中第一个元素为'\ 0')。如果输入有效,则在输出字符串大小的两个大小之间获取一个随机值,并创建一个大小为+1的数组(它必须包含'\ 0'作为最后一个元素),用随机字符填充它有效的字符范围,并在最后一个位置加上'\ 0'; 然后返回结果。因为你必须得到一个范围内的随机数两次(一次是大小,另一次是生成随机字符),我建议你做一个效用函数,它返回一个范围内的随机数。

代码语言:javascript
复制
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> //required for random

const char MIN_CH = 44;
const char MAX_CH = 122;

//utility function to create a random number between two numbers
int random_range(int min, int max)
    {
    return (rand() % (max - min + 1)) + min;
    }

char *generateString(char *par1, char *par2)
    {
    //get the length from input strings
    unsigned int len1 = strlen(par1);
    unsigned int len2 = strlen(par2);
    //variable to hold the result string
    char* ret;

    //check if the input is valid
    if(len1 >= len2)//invalid input
        {
        //alloc empty string
        ret = (char*)malloc(sizeof(char));
        ret[0] = '\0';
        }
    else
        {
        //get a random size between the 2 input strings sizes
        int size = random_range(len1 + 1, len2 - 1);
        //alloc a string of that size +1 for \0
        ret = (char*)malloc(sizeof(char) * (size + 1));
        //put random characters in all positions except last one
        for(int i=0; i<size; i++)
            {
            ret[i] = (char)random_range(MIN_CH, MAX_CH);
            }
        //put string terminator in last position
        ret[size] = '\0';
        }
    return ret;
    }

提示:如果程序中的其他任何地方都不需要函数“random_range”,则可以在generateString的范围内声明它; 这样它只在那里可用,并且不会污染全局命名空间(请注意以下内容在以这种方式编写的c ++中不起作用):

代码语言:javascript
复制
char *generateString(char *par1, char *par2)
    {
    //utility function to create a random number between two numbers
    int random_range(int min, int max)
        {
        return (rand() % (max - min + 1)) + min;
        }

    //get the length from input strings
    unsigned int len1 = strlen(par1);
    unsigned int len2 = strlen(par2);
    //variable to hold the result string
    char* ret;

    //check if the input is valid
    if(len1 >= len2)//invalid input
        {
        //alloc empty string
        ret = (char*)malloc(sizeof(char));
        ret[0] = '\0';
        }
    else
        {
        //get a random size between the 2 input strings sizes
        int size = random_range(len1 + 1, len2 - 1);
        //alloc a string of that size +1 for \0
        ret = (char*)malloc(sizeof(char) * (size + 1));
        //put random characters in all positions except last one
        for(int i=0; i<size; i++)
            {
            ret[i] = (char)random_range(MIN_CH, MAX_CH);
            }
        //put string terminator in last position
        ret[size] = '\0';
        }
    return ret;
    }

你可以在这里测试代码,有一个主要有3个例子。

也就是说,你的问题并没有真正令人惊讶地解释,你应该努力解决这个问题。问题本身的回报应该是多么清楚。相反,我在你的问题标题中假设了几个可能的“随机字符串”含义。如果这不是您正在寻找的结果,请告诉我。如果将来某人正在寻找类似的东西,请重新提问。

票数 0
EN

Stack Overflow用户

发布于 2019-05-20 16:35:39

创建这样的功能是微不足道的。如果par1小于par2,那么有一个无穷大的字符串小于par2。只需在字符串中添加一个,或任意长度的字符串就足够了。

您没有对生成的字符串施加任何限制,也没有说明生成的randon字符串的分布(统​​一,正常等)。你的意思是生成的字符串是否具有给定的长度?或者遵循一些概率分布?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档