我想用这个签名创建一个函数
char *generateString(char *par1, char *par2);
结果应该是一个严格大于par1
(与之比较strcmp
)并严格低于的字符串par2
。Par1和par2的随机长度介于0和MAX之间。
每个字符在[INF,SUP]
间隔之间选择。(参数是由这些字符组成的字符串)。
字符串长度有限,但在0和某个MAX值之间也是随机的。
编码似乎很难,任何人都可以提供帮助?
发布于 2019-05-20 16:07:33
首先,您必须使用strlen函数检查输入字符串大小。如果输入无效,则创建一个长度为0的空字符串(这意味着大小为1的char数组,其中第一个元素为'\ 0')。如果输入有效,则在输出字符串大小的两个大小之间获取一个随机值,并创建一个大小为+1的数组(它必须包含'\ 0'作为最后一个元素),用随机字符填充它有效的字符范围,并在最后一个位置加上'\ 0'; 然后返回结果。因为你必须得到一个范围内的随机数两次(一次是大小,另一次是生成随机字符),我建议你做一个效用函数,它返回一个范围内的随机数。
#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 ++中不起作用):
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个例子。
也就是说,你的问题并没有真正令人惊讶地解释,你应该努力解决这个问题。问题本身的回报应该是多么清楚。相反,我在你的问题标题中假设了几个可能的“随机字符串”含义。如果这不是您正在寻找的结果,请告诉我。如果将来某人正在寻找类似的东西,请重新提问。
https://stackoverflow.com/questions/-100006756
复制相似问题