我最近加入了Stackoverflow社区,因为我不得不问这个问题。我一直在寻找网站上可能的解释和解决方案,但到目前为止,我想要的一切都没有启发我。我的错误可能是由非常具体的代码行引起的。我正在尝试创建一个读取结构票数数组的函数(struct包含整数成员号,char *cattory,char *suminee(,并复制所有包含相同数字和类别的构成的投票。基本上显示所有重复的选票。
typedef struct
{
int member;
char *categ;
char *nom;
}Vote
Vote vote(int member, char *categ, char *nom)
{
Vote result;
result.member = member;
result.categ = categ;
result.nom = nom;
return result;
}
int votes_count(Vote *v, int n, Vote *v1)
{
int result = 0;
int *index = malloc(sizeof(int) * 1000);
int a = 0;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (a == 0 && v[i].member == v[j].member && strcmp(v[i].categ, v[j].categ) == 0)
{
v1[result++] = vote(v[j].member, str_dup(v[j].categ), str_dup(v[j].nom));
index[a++] = j;
}
for (int b = 0; b < a; ++b)
{
if( a > 0 && v[i].member == v[j].member && strcmp(v[i].categ, v[j].categ) == 0 && j != index[b])
{
v1[result++] = voto(v[j].member, str_dup(v[j].categ), str_dup(v[j].nom));
index[a++] = j;
}
}
}
}
return result;
}
Afterwads,它返回包含所有重复的新数组的元素数量。我想使用一个INT数组来保存所有行索引,以便该函数不会读取并复制其已经计入的行。对不起,如果代码难以理解,如果需要,我可以编辑以更易于理解。感谢您的任何答案。P.S:我是葡萄牙语,对语法错误提前抱歉
- 如果您唯一的意图是收获重复项,则只需要与 之前的元素进行比较
- 您不需要
index[]
数组
为简单起见,我使用了两个整数数组,您应该将它们更改为结构数组,还可以更改比较函数。
unsigned fetchdups(int orig[], int dups[], unsigned count)
{
unsigned this, that, ndup=0;
for (this=1; this<count; this++){
for (that=0; that<this; that++){
/* change this to your compare() */
if(orig[that] == orig[this]) break;
}
if (this == that) continue; /* no duplicate */
dups[ndup++] = this;
}
return ndup;
}