0

我有一个包含重复项的以下节点,我怎样才能摆脱重复项?它给我的输出如下。我真的很陌生,任何帮助都将不胜感激。谢谢。

a@ex.com b@ex.com b@ex.com c@ex.com d@ex.com e@ex.com e@ex.com f@ex.com

但我想要

a@ex.com b@ex.com c@ex.com d@ex.com e@ex.com f@ex.com

//节点声明。

Node tmpNodes[10];
typedef struct {
char emails[(LENGTH*2)+1];
}Node;

//使用qsort()对节点进行排序。

qsort(tmpNodes, nodesCount, sizeof(Node), cmpFunc);

int cmpFunc(const void * userA, const void * userB){
Node * userAA;
Node * userBB;
userAA = (Node * )userA;
userBB = (Node * )userB;

return strcmp(userAA->emails, userBB->emails);
}
4

2 回答 2

0

创建新数组,您将在其中复制节点:

Node* tmpNodesUnique[10]; <-- NOTE it is pointers
int uniqueFound = 0;
tmpNodesUnique[0] = &tmpNodes[0];
for (int i=1; i<10; i++)
    if (strcmp(tmpNodesUnique[uniqueFound]->emails, tmpNodes[i].emails) != 0)
        tmpNodesUnique[++uniqueFound] = &tmpNodes[i];

因此,在 uniqueFound - 计算是否将存储不同的电子邮件,并且 tmpNodesUnique 将包含指向唯一节点的指针,因此您可以执行以下操作:

for (int i=0; i<=uniqueFound; i++) <-- NOTE <=
    use tmpNodesUnique[i]->emails;
于 2013-10-15T01:17:46.900 回答
0

通过持有第一个节点,并丢弃列表中与持有节点相同的以下节点。当您找到一个与持有节点不同的节点时,它将成为新的持有节点。起泡,冲洗,重复。

于 2013-10-15T01:09:32.237 回答