从数组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 }
测试结果:
以上是用最简单,也最容易想到的办法实现的,可能性能不是很好。希望提出改进建议,谢谢