如何删除结构体数组中的元素

qijilw 2005-03-15 08:49:43
请教大家如何才能删除结构体数组中的元素?

例如:原数组的元素有5个,通过指定条件如何删除满足条件的元素?
...全文
2418 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcboyxhy 2005-03-15
  • 打赏
  • 举报
回复
一样
只不过把判断结构大小的函数自己写。
qijilw 2005-03-15
  • 打赏
  • 举报
回复
比如说吧:
struct tagInfo
{
char cNmae[20];
char cID[6];
float fScore[4];
};

tagInfo Perinfo[5];

这不是有5个元素吗,现在想通过指定条件删除某个元素。比如说第2个元素,那么数组中就只剩下4个元素了。请问该如何实现呢?

谢谢,盼复。
pcboyxhy 2005-03-15
  • 打赏
  • 举报
回复
你的意思是
数组定义在结构体里面?
还是要释放删去的元素的空间?

如果是释放空间,
除非是自己用new或者malloc在堆里分配的空间,
否则不能人为的释放。
qijilw 2005-03-15
  • 打赏
  • 举报
回复
谢谢DX,请讲解一下好吗?而且程序有不少错咧,编译无法通过呀。
yuchengliu 2005-03-15
  • 打赏
  • 举报
回复
#inlcude <iostream>
using namespace std;
int find(int nfind);
int main()
{
int a[] = {1, 2, 3, 4, 5, 6};
int ncount = 0;
int nfind = 3;
ncount = find(nfind);
if (ncount != -1)
{
for (int i = ncount; i < (sizeof a) / sizeof (int); i++)
{
a[i] = a[i + 1];
}
}
}
int find(int nfind)
{
for(int i = 0; i < (sizeof a) / sizeof (int); i++)
{
if (a[i] == nfind)
{
return i;
}
else
i++;
}
return -1;
}
qijilw 2005-03-15
  • 打赏
  • 举报
回复
谢谢pcboyxhy(-273.15℃)的回复,以上程序确实删除了重复元素。但我要请教的是如何删除结构体数组中的元素。比如原来是5个元素,通过删除后结构体中就只4个元素了。应如何实现,谢谢!盼复.
纪俊 2005-03-15
  • 打赏
  • 举报
回复
结构体数组是数组
数组是静态成员存放在栈中而不是堆中
应该不是自己来控制释放
而是在超出这个数组的生命空间的部分由系统自动回收资源
TangChin 2005-03-15
  • 打赏
  • 举报
回复
结构体数组麻烦的地方就是每个元素都是一个结构体,又有多个成员,所以赋值的时候比较麻烦

我觉得使用memcpy比较好,最好使用一个过渡buffer
比如要删除第i个元素
memcpy(tmpbuf,array+i+1,size)
memcpy(array+i,tmpbuf,size)
pcboyxhy 2005-03-15
  • 打赏
  • 举报
回复
先把数组排序,
然后参考这个


针对有序数组进行重复元素删除
#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
int data_list[ ] = {1, 2, 2, 3, 3, 3, 4, 4, 5, 6, 7, 7, 8, 9};
int data_size = sizeof(data_list) / sizeof(data_list[0]);
int pri_num = data_list[0];
int new_size = data_size;

for(int p1 = 1 ,p2 = 1; p1 < data_size; )
{
if(data_list[p2] == pri_num)
{
while( data_list[p2] == pri_num && p2 < data_size)
{
++p2;
--new_size;
}

if( p2 == data_size )
break;
data_list[p1] = data_list[p2];
++p2;
}

pri_num = data_list[p2];
++p1;
}
data_size = new_size;
for(int i=0; i<data_size; ++i)
cout<<data_list[i]<<" ";
system("PAUSE");
return 0;
}
第3章数据结构 3.1 结构体 实例079结构体类型的定义 实例080结构体变量的初始化 实例081如何使用嵌套结构 实例082将结构作为参数传递并返回 实例083共用体数据类型的定义 实例084共用体变量的初始化 实例085如何使用匿名共用体 实例086枚举类型的定义与使用 实例087用new动态创建结构体 实例088使用结构体标识操作员名称密码和级别 实例089创建包括12个月份的枚举类型 实例090带有函数的结构体 3.2 指针、地址与引用 实例091使用指针自增操作输出数组元素 实例092利用指针表达式操作遍历数组 实例093数组地址的表示方法 实例094指针和数组的常用方法 实例095结构指针遍历结构数组 实例096指针作为函数的参数 实例097多维数组的指针参数 实例098指针作为函数的返回值 实例099使用函数指针制作菜单管理器, 实例100使用指针实现数据交换, 实例101使用指针实现整数排序 实例102指向结构体变量的指针 实例103周指针实现逆序存放数组元素值 实例104输出二维数组的有关值 实例105输出二维数组任一行任一列值 实例106使用指针查找数列的最大值和最小值 实例107用指针数组构造字符串数组 实例108将若干字符串按照字母顺序输出 实例109用指向函数的指针比较大小 实例110用指针函数实现求学生成绩 实例111使用指针的指针输出字符串 实例112实现输入月份号输出该月份英文名 实例113使用指向指针的指针对字符串排序 实例114分解字符串的单词 3.3 数组 实例115向数组赋值 实例116遍历数组 实例117求数组元素的平均和 实例118数组的排序 实例119向数组插入元素 实例120数组的删除操作 实例121数组冒泡排序法

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧