0

如何在 C 中对数组元素执行连接和拆分功能?

例如,假设我有两个数组:

int value[]=  {0,1,2,3};
int id[]  = {1,1,3,3};
// I want to join the elements of "value" array whoz value of "id" are same.
//In my case 0,1 elements from "value" array has the same "id" value that is 1,1
//and 2,3 from "value" has same "id" value 3,3. So it will join {01,23}
//And if i want to perform split function it will give me back{0,1,2,3}

我在 perl 脚本中做了同样的事情,但我不确定如何在 C 中获得这个功能?

4

2 回答 2

2

C 没有像许多高级语言那样的内置“动态”数组。

您必须使用 自己分配所需的存储空间malloc(),然后将所需的数据逐个元素复制到新数组中。

我也不太明白您描述的所需操作......“加入value其值id相同的元素”没有意义。

你想计算数组的交集吗?但它们显然不是套装,所以这听起来也不对。

于 2013-04-05T13:16:54.603 回答
1

以下将做你想要的:

#include <stdlib.h>
#include <stdio.h>

int main(){
  int i,v;
  int ID_SIZE=7;
  int value[]={0,1,2,3,1,4, 7};
  int id[]=   {1,1,3,3,2,2,10};

  //Discover largest and smallest ids in order to allocate memory
  int min=0,max=0,length;
  for(i=1;i<ID_SIZE;++i){
    if(id[i]<id[min]) min=i;
    if(id[i]>id[max]) max=i;
  }
  //Replace ids with values
  min=id[min];
  max=id[max];
  length=max-min+1;

  int **unions;
  int *append;
  append=(int *)calloc(length,sizeof(int));

  for(i=0;i<length;++i)
    append[i]=-1;    //Initial insertion point for each id is at 0

  //Create 2D array unions[IDS HERE][VALUES HERE]
  unions=(int **)calloc(length,sizeof(int*));
  for(i=0;i<length;++i)
    unions[i]=(int *)calloc(ID_SIZE,sizeof(int));

  //Join arrays
  for(i=0;i<ID_SIZE;++i){
    printf("Inserting %d into %d at %d\n",value[i],id[i],append[id[i]-min]+1);
    unions[id[i]-min][++append[id[i]-min]]=value[i];
  }

  for(i=0;i<length;++i){
    if(append[i]>=0){
      printf("Id %d has: ",i+min);
      for(v=0;v<=append[id[i]-min];++v)
        printf("%d ",unions[i][v]);
      printf("\n");
    }
  }

  return 0;
}

它创建了两个动态数组。

一个名为的数组append跟踪为每个 id 找到了多少值。

另一个数组,称为unions存储计算结果。

对于我在程序中定义的输入,返回以下内容:

Inserting 0 into 1 at 0
Inserting 1 into 1 at 1
Inserting 2 into 3 at 0
Inserting 3 into 3 at 1
Inserting 1 into 2 at 0
Inserting 4 into 2 at 1
Inserting 7 into 10 at 0
Id 1 has: 0 1 
Id 2 has: 1 4 
Id 3 has: 2 3 
Id 10 has: 7 
于 2013-04-05T14:06:43.693 回答