防止添加重复条目(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++;
瓦尔特另见。