防止添加重复条目(C程序)

防止添加重复条目(C程序),c,arrays,C,Arrays,我有一个向表中添加条目的方法。这些条目是人们的姓名和地址 int rtable_add(RESIZABLE_TABLE * table, char * name, void * value) { table->array[table->currentElements].name = strdup(name); table->array[table->currentElements].value = value; table->current

我有一个向表中添加条目的方法。这些条目是人们的姓名和地址

int rtable_add(RESIZABLE_TABLE * table, char * name, void * value) {

    table->array[table->currentElements].name = strdup(name);
    table->array[table->currentElements].value = value;
    table->currentElements++;
    int i = 0;
    for(i = 0; i < table->currentElements;i++) {
       if(strcmp(table->array[i].name, name) == 0) {
           table->array[i].value = value;
       }
    }
  return 0;
}
int-rtable_-add(可调整大小的_-TABLE*TABLE,char*name,void*value){
表->数组[表->当前元素].name=strdup(名称);
表->数组[表->当前元素].value=value;
表->currentElements++;
int i=0;
对于(i=0;icurrentElements;i++){
if(strcmp(表->数组[i].name,name)==0){
表->数组[i]。值=值;
}
}
返回0;
}

但是,如果我再次给该方法传递相同的名称,但是传递不同的地址,它应该更新旧条目的地址(即值),而不应该把它看作一个新的条目。比如说,

如果我给出一组条目-

1) 乔治“葡萄树街126号”

2) 艾希礼“藤街889号”

3) 乔治“葡萄树街556号”

程序应该只更新George的地址(即值),但不应该在表中添加另一个重复条目

我的代码的问题是,我这样做,这就是它给我的-

---我得到了什么---

1) 乔治“葡萄树街556号”

2) 艾希礼“藤街889号”

3) 乔治“葡萄树街556号”

--期望--

1) 乔治“葡萄树街556号”


2) Ashley“Vine Street 889”

问题才刚开始。首先创建一个新条目,将其添加到表中,然后修改循环中的现有条目。我建议先搜索匹配的条目,如果没有找到任何条目,只添加一个新条目


当您运行代码时,将创建条目#3并将其添加到表中,然后在for循环中修改条目#1。

代码要做的第一件事是将传递的名称和值作为新条目插入数组末尾:

table->array[table->currentElements].name = strdup(name);
table->array[table->currentElements].value = value;
它要做的下一件事是遍历表,查找具有相同名称的任何项,并将它们的值设置为传入的项,在您的示例中,该值将更新原始项和函数刚刚附加到末尾的项:

int i = 0;
for(i = 0; i < table->currentElements;i++) {
   if(strcmp(table->array[i].name, name) == 0) {
       table->array[i].value = value;
   }
}
inti=0;
对于(i=0;icurrentElements;i++){
if(strcmp(表->数组[i].name,name)==0){
表->数组[i]。值=值;
}
}
顺便说一句,您正在输入名称,但不是值。我不知道这是否是有意的。

在分配之前移动for循环:

int i = 0;
for(i = 0; i < table->currentElements;i++) {
   if(strcmp(table->array[i].name, name) == 0) {
       table->array[i].value = value; //change the value
       return 0; //dont add a new one
   }
}
table->array[table->currentElements].name = strdup(name);
table->array[table->currentElements].value = value;
table->currentElements++;
inti=0;
对于(i=0;icurrentElements;i++){
if(strcmp(表->数组[i].name,name)==0){
table->array[i].value=value;//更改值
返回0;//不添加新的
}
}
表->数组[表->当前元素].name=strdup(名称);
表->数组[表->当前元素].value=value;
表->currentElements++;
瓦尔特

另见。