我是一名新学员,希望在C中使用strstr()输出填充真实数组。
列表中有三个关键字组,需要比较不同的大小。
keywords group 1: foo1,foo2. Stored in truth[0],truth[1].
keywords group 2: bar1,bar2,bar3,bar4.Stored in truth[2] to truth[5].
keywords group 3: baz1,baz2,baz3,baz4,....Stored in truth[6] to truth[k-1].
假设输入没有任何关键字,真值数组中的所有成员都在开头设置为掩码编号(如-1)。如果输入与关键字组中的任何关键字匹配,则该组中的元素应设置为1,并且同一关键字组中的所有其他元素都需要设置为0.我还要检查每个关键字中最多只有一个关键字基。
例如:
input:"bar1"; output:[-1,-1, 1,0,0,0, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,....];
input:"foo1_baz5"; output:[1,0, -1,-1,-1,-1, 0,0,0,0,1,0,0,0,0,0,...];
input:"foo1_bar1_baz1"; output:[1,0, 1,0,0,0, 1,0,0,0,0,0,0,0,0,0,...];
input:"foo1_foo2"; output:"too many keywords".
这是我迄今为止所使用的代码(让我们说列表中共有100个关键字):
void fill_truth(char input, char *lists, int *truth)
{
int i;
int truth[100];
memset(truth, -1, 100*sizeof(int));
int count = 0;
for(i = 0; i < 100; ++i){
if(strstr(input, lists[i])){
truth[i] = 1;
++count;
}
}
if(count > 3) printf("too many keywords: %d, %s\n", count, input);
}
如何修改strstr可以将其他人设置为0的代码并检查同一组中是否只有一个以上的关键字?谢谢你的帮助!
更新1:抱歉格式问题,这里-1只是一个掩码编号,你可以使用除1和0以外的任何其他整数。
更新2:现在我可以使用3个循环将其他人设置为0并且还可以检查关键字的总数,我目前唯一的问题是,如果我设置了所有初始值,它将给出-nan到-1。我也尝试了一些其他的整数,但是无论我设置什么初始值,它都会覆盖0。有关为什么会发生这种情况以及我应该在开始时将哪个初始值设置为掩码的任何提示?
Update3:很抱歉由于在更新时发布了多个代码变体而导致误解。我已经想到了这一点,并感谢所有花时间回答我的问题的人!