gpt4 book ai didi

c - 删除结构体的设置间隔

转载 作者:行者123 更新时间:2023-11-30 15:04:56 25 4
gpt4 key购买 nike

我在“删除”我的结构/数组时遇到问题。现在我可以将最大数组定义为大小 10。我可以用包含姓名、年龄等的结构填充数组。我的搜索功能将让我在一组区间之间进行搜索,比如年龄 10 到 25 岁。我希望我的删除功能做的是删除所有年龄在 10 到 25 岁之间的人。只要不超过我定义的限制,我应该能够将新人员重新输入数据库。现在它似乎随机地从数组中删除东西。

struct database
{
float age,b,c,d;
char name[WORDLENGTH];
};
typedef struct database Database;

search func();

......

    void remove(Database inv[], int *np, int *min, int *max, int *option)
{
int i;

if (*np == 0)
{
printf("The database is empty\n");
return;
}

search(inv, *np, low, high, option);

if (*option == 1)
{
for (i = 0; i<*np; i++)
{
if (inv[i].age >= *low && inv[i].age <= *high)
{
(*np)--;

}
}
}
}

最佳答案

Right now it seems to randomly remove stuff from the array.

您的代码删除的项目根本不是随机的。这一行

(*np)--;

删除最后一项。因此,如果范围包含两个与 inv 开头的搜索条件匹配的项目,您的代码将从末尾删除两个项目。如果匹配项位于 inv 有效范围的后面,事情就会变得有点复杂,因此删除开始看起来是随机的。

struct数组中删除与从int数组中删除没有什么不同。您需要遵循以下算法:

  • 维护读取索引和写入索引,初始设置为零
  • 运行一个循环,当读取索引超出末尾时终止
  • 在每一步检查读取索引处的项目
  • 如果该项不符合删除条件,则从读索引复制到写索引,并将两个索引都前移
  • 否则,仅前进读取索引
  • 在循环结束时将 new np 设置为写入索引的值。

此算法可确保已删除项目后面的项目移向数组的前面。请参阅this answer有关上述方法的示例实现。

关于c - 删除结构体的设置间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40068451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com