(C) 仅当满足条件时,才删除for循环下整数数组的元素
和/或使用不满足循环条件的剩余元素创建新数组 所以我有两个数组,我比较每个元素,用相应的下标,这样我可以检查是否相等(C) 仅当满足条件时,才删除for循环下整数数组的元素,c,arrays,loops,elements,C,Arrays,Loops,Elements,和/或使用不满足循环条件的剩余元素创建新数组 所以我有两个数组,我比较每个元素,用相应的下标,这样我可以检查是否相等 for ( i = 0; i < n; i++) { if ( arrayOne[i] == arrayTwo[i] ) { arrayOne[i] = -1 /UPDATE#1 I assinged the values to -1 since I really don't care what happens tp the "taken" ones,
for ( i = 0; i < n; i++) {
if ( arrayOne[i] == arrayTwo[i] ) {
arrayOne[i] = -1 /UPDATE#1 I assinged the values to -1 since I really don't care what happens tp the "taken" ones, what I want is the statistics of how many became a couple, thus the couple++ counter
couple++; //frequency of same value for each respective subscript
}
}
输出:
arrayTwo[] = {5,6,7,8};
arrayOne[] = {5,5,8,5,4,4,4}; //comparing arrayOne to arrayTwo
couple = 1; //(since only element[0] of the two arrays are the same --> 5 == 5
atlast = 1; //no regards to position or subscript as long as present in arrayTwo
然后:
arrayTwo[] = {5,6,7,8};
arrayOne[] = {5,5,8,5,4,4,4}; //comparing arrayOne to arrayTwo
couple = 1; //(since only element[0] of the two arrays are the same --> 5 == 5
atlast = 1; //no regards to position or subscript as long as present in arrayTwo
我应该删除arrayOne[0]
,它是5,所以我的arrayOne
(或者我将创建新的数组)。
剩下的元素是5,8,5,4,4,4
然后,嘿,5已被删除(采取),所以我不需要5了。剩下的元素是8,4,4,4
到现在为止,我只有8,4,4,4。但是4个重复,我只需要一个4。所以我删除了重复的4s
最后,在删除了这些元素之后,我在arrayOne
中只有8和4个元素。我将在arrayTwo
中查找他们的合作伙伴。(相同的值,不考虑下标或位置)意思是,我不再关心位置,只要我在arrayTwo
中有相同的值,这才是最重要的)
只有8在阵列two
中有合作伙伴。我将其设置为atlast++
,因此atlast=1
我不知道该怎么做:
arrayTwo[] = {5,6,7,8};
arrayOne[] = {5,5,8,5,4,4,4}; //comparing arrayOne to arrayTwo
couple = 1; //(since only element[0] of the two arrays are the same --> 5 == 5
atlast = 1; //no regards to position or subscript as long as present in arrayTwo
arrayOne={要从数组中删除元素,必须将要删除的索引后面的所有元素向下移动一个,然后减小数组的长度 备选方案包括:
另一种解决方法是创建“arrayOneBis”并从“arrayOne”复制值,跳过要删除的元素
#include <stdio.h>
int main(){
int arrayTwo[] = {5,6,7,8};
int arrayOne[] = {5,5,8,5,4,4,4};
int size1 = 7, size2 = 4;
//i will initialize them randomly, 0 - 9 only
int counting[10] = {0};
int i;
for(i=0;i<size1;++i)
++counting[arrayOne[i]];//counting
for(i=0;i<size2;++i)
counting[arrayTwo[i]]=0;//delete
size1 = 0;
for(i=0;i<10;++i){
if(counting[i]){
arrayOne[size1++] = i;
}
}
printf("result arrayOne = { ");
for(i=0;i<size1;++i)
printf("%d ", arrayOne[i]);//{ 4 }
printf("}\n");
return 0;
}
int main(){
int arrayTwo[]={5,6,7,8};
int arrayOne[]={5,5,8,5,4,4};
int size1=7,size2=4;
//我将随机初始化它们,仅0-9
整数计数[10]={0};
int i;
对于(i=0;ii在您的示例中,为什么要完全删除5(因为它是重复的),但当涉及到4时,除了其中一个之外,您要全部删除它们?您有数组中有效元素的数量吗?通过删除,您是否也要释放空间?@Filipgonçalves Gonca,因为5在arrayTwo中发现了一对“夫妇”(第一个循环关心情侣计数器检查相同的值,相同的位置。例如,arrayTwo[0]=5和arrayOne[0]=5,因此它们匹配。这就像命中注定的爱情。lol。然后剩余的5不再有爱情的机会,因为5已经被占据。4仍然存在,即使它没有命中注定的爱情(相同位置的确切值4=不可能),它将不得不等待,比如说,必然的爱(如果他们没有在完全相同的位置相遇,比如说位置[3],这并不重要,只要他们匹配)@cup我将随机初始化它们,仅0-9个,每个数组6个元素。我刚刚超过了我的数组,这里有一个是为了指出我的目标。通过删除,我不再关心其余元素的位置(我知道它们将在“take”之后在数组中的下标或位置发生变化)数组中的已删除。从技术上讲,在C语言中不能这样做,至少没有显式语言支持。你是说使用表示数组结尾的特殊指针/索引吗?是的,我的意思是减少用于跟踪数组长度的变量。如果数组通过任何函数形式参数,
sizeof
不再有用,因此保留一个长度变量无论如何都很方便。显然不会释放内存,但这就是我提到链表的原因。