从数组A中删除在数组B中存在的元素,用C语言实现

从数组A中删除在数组B中存在的元素,用C语言实现

考验数组操作的能力,C语言的熟练程度。

 1 //功能:从数组A中删除在数组B中也存在的数据
 2 //输入:arrA --- 数组A
 3 //      lenA --- 数组A的长度
 4 //      arrB --- 数组B
 5 //      lenB --- 数组B的长度
 6 //输出:删除后A的长度
 7 int DelAwhichinB(int* arrA, int lenA, int* arrB, int lenB)
 8 {
 9     //int lenA = sizeof(arrA);   //这里是4,自动退化为指针
10 
11     int ndelcount = 0;   //记录有几个被删除
12     bool bsame = false;   //是否存在相同的元素
13     int j=0;   //删除元素后的下标
14 
15     for (int i=0; i<lenA; i++)
16     {
17         bsame = false;
18         for (int k=0; k<lenB; k++)
19         {
20             if (arrB[k] == arrA[i])
21             {
22                 ndelcount++;
23                 bsame = true;
24                 break;
25             }
26         }
27 
28         if (false == bsame)
29         {
30             //如果在B中不存在,就放入新数组
31             arrA[j++] = arrA[i];
32         }
33     }
34 
35     return (lenA-ndelcount);
36 }

测试代码:

 1 int main(int argc, char* argv[])
 2 {
 3     int arrA[9] = {7,2,5,9,10,23,67, 23, 11};
 4     //int arrB[3] = {4, 4, 4};
 5     int arrB[3] = {7, 5, 23};
 6     int arrlen = DelAwhichinB(arrA, 9, arrB, 3);
 7     printf("删除后的新数组是: ");
 8     for (int i=0; i<arrlen; i++)
 9     {
10         printf("%d ", arrA[i]);
11     }
12 }

测试结果:

以上是用最简单,也最容易想到的办法实现的,可能性能不是很好。希望提出改进建议,谢谢

原文地址:https://www.cnblogs.com/suiyuemanbu/p/3668348.html