【发布时间】:2015-09-14 12:20:14
【问题描述】:
我正在尝试生成随机字符串,每个字符的出现次数是固定的。例如-G(字符串中的一个字符),不能出现超过4次,S,不能超过2次等等。我的代码能够生成字符串,但不是字符频率的问题。
有什么办法可以解决这个问题吗?任何帮助将不胜感激。
我目前的代码如下:
#include<stdio.h>
#include<stdlib.h>
//The basic function here is like (rand() % range)+ Lower_bound
int rand_int(int a,int b)
{
if (a > b)
return((rand() % (a-b+1)) + b);
else if (b > a)
return((rand() % (b-a+1)) + a);
else
return a;
}
int main()
{
FILE *fptr;
fptr=fopen("C:\\Users\\Desktop\\dataset.txt","w");
int a,b,r,i,j,k;
char res;
a = 65;
b = 90;
k = 0;
char str[] = "ITLDGGCSSHLPLRCSVDSGCPGLRAGSVSCLPHGSIREGMECSRRHGVGIMGDRRDGSRDS"; //working string
char str_all[] = "ITLDGGCSSHLPLRCSVDSGCPGLRAGSVSCLPHGSIREGMECSRRHGVGIMGDRRDGSRDS";
char subs[] = "ACDEGHILMPRSTV"; //
fprintf(fptr,"%s",str);
fprintf(fptr,"%s","\n");
// value of j represents the number of strings to be displayed
for(j=0 ; j<10000 ; j++)
{
// getting all the sequence strings
// for changing the string at all positions
for(i=0 ; i<62 ; i++)
{
r = rand_int(a,b);
res = (char)r;
str_all[i] = res;
}
// substituting all the not required characters with required ones
for(i=0 ; i<62 ; i++)
{
if(str_all[i] == 'B' || str_all[i] == 'F' || str_all[i] == 'J' || str_all[i] == 'K' || str_all[i] == 'N' || str_all[i] == 'O' || str_all[i] == 'Q' || str_all[i] == 'U' || str_all[i] == 'W' || str_all[i] == 'X' || str_all[i] == 'Y' || str_all[i] == 'Z')
{
str_all[i] = subs[k++];
}
if(k>13)
k=0;
}
//printf("\nModified String for all string positions \n%s",str_all);
fprintf(fptr,"%s",str_all);
fprintf(fptr,"%s","\n");
}
fclose(fptr);
return 0;
}
【问题讨论】:
-
您可以计算 char 生成的次数,并在超出限制时进行限制。
-
关于您的代码的一些不相关的注释:
int和char类型大部分是可互换的,因此您可以这样做,例如str_all[i] = rand_int(a, b);对于a和b,不要使用“幻数”,而是使用实际字符文字'A'和'Z';您只在一个地方使用a和b,而是在那里使用字符文字;无需调用fprintf两次来打印一行,例如fprintf(fptr, "%s\n", str_all); -
这里是完整代码,复制粘贴...stackoverflow.com/a/33991225/294884