【发布时间】:2013-11-29 00:52:30
【问题描述】:
我想创建一个长度为 m*j 的随机字符串,例如 m=4,j=3。 我这样做了
static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return alphanum[rand() % stringLength]
我保留了 stringlength=3 以便返回值仅由长度为 20 的随机顺序的前三个字母(A、B、C)组成
我现在要做的是有一个随机字符串,其中 A 只有 3 次 B 只有 4 次,C 只有 3 次。 如何应用这些约束? 计数器?
嗨, 我做了类似于答案中建议的事情。这是代码
static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//Function which generates a random character
char GetRandom(int Position){
return alphanum[rand() % Position];
}
//******************************************************************************
// MAIN
//******************************************************************************
int main()
{
//Assuming a 3 machines 3 jobs scenario. So chromosome
int Jobs=4;
int Machines=3;
int ChromLength=Jobs*Machines;
int StringLength=Jobs;
int Counter[Jobs],i;
char C;
char Chromosome[(ChromLength-1)];
//Seeding
srand(time(0));
//Init array
for(int Cnt=0;Cnt<Jobs;Cnt++)
Counter[Cnt]=0;
//Test
//Fill the array
for(i=0;i<ChromLength;)
{
//Get the Character
C=GetRandom(StringLength);
cout<<"Char:"<<C<<endl;
//Check which character is returend
for(int j=0;j<StringLength;j++)
{
if(C==alphanum[j])
{
Counter[j]++;
cout<<"I am in J "<<j<<" Char:"<<C<<endl;
if(Counter[j]==Jobs)
break;
else
{
Chromosome[i]=C;
cout<<"I:"<<i<<endl;
i++;
}
}
}
}
cout<<Chromosome;
return 0;
}
但输出中有一些尾随字符无法理解它们是什么 这是一个截图
【问题讨论】:
-
为什么要添加 C 和 OOP 标签?
-
字符串末尾有垃圾的原因是您没有 NULL 终止它。
-
谢谢@RetiredNinja 我现在得到了正确的结果:-)