从c中的数组中删除一系列元素

时间:2018-09-15 22:12:33

标签: c arrays

我需要从数组中删除一系列元素,但是我不知道如何做。我尝试了这个for循环,其中start是范围的开始,end是范围的结束。

int main(void)
{
int n, n2, i, start, end, index;
int a1[n];
int a2[n2];

printf("Enter the length of the array#1: ");
scanf("%d", &n);

printf("Enter the elements of the array#1: ");
for (i = 0; i < n; i++){
scanf("%d", &a1[i]);}

printf("Enter the length of the array#2: ");
scanf("%d", &n2);

printf("Enter the elements of the array#2: ");
for (i = 0; i < n2; i++){
scanf("%d", &a2[i]);}

printf("Enter the start and end indexof array #1 to be removed: ");
scanf("%d %d", &start, &end);

int a3[(end-start)+1];

printf("Enter the position(index)of the array #2 to be added before: ");
scanf("%d", &index);

for (i=0;i < (n - end - 1);i++){
a1[start + i] = a1[end + i + 1];
a1[end + i + 1] = 0;
}
printf("\n");
printf("array1: ");


for (i=0;i < (n);i++){
printf("%d", a1[i]);
printf(" ");
}

2 个答案:

答案 0 :(得分:0)

您有:

  • 使用nn2给出数组的大小,而无需先初始化这些变量。尽管您尚未初始化数组,但是如果初始化了,由于VLA,它将失败。
  • 未检查您从用户那里收到的输入内容,提供的范围是否可行?如果end - start大于数组的长度怎么办?
  • 在该元素移动到新的位置/索引之后,使用0作为替换值,如果要移动的数字本身是 0 会怎样?

对于最后一点,请使用INT_MAX这样的值,该值被用户输入的可能性非常小,并且您需要limits.h标头+之后,这样做很容易您的for循环如下所示:

for(index=0;((index<sizeArr)&&((arr[index]!=INT_MAX)));++index)

此循环将从原始数组中打印出start - end个较小的值。

答案 1 :(得分:-1)

由于要在运行时确定数组大小(通过用户输入),因此应使用动态分配。

对于使用此脚本要完成的操作,我并不完全满意,但是下面是向动态分配过渡的示例:

int main(void)
{
    int n, n2, i, start, end, index;
    int *a1;
    int *a2;

    printf("Enter the length of the array#1: ");
    scanf("%d", &n);
    a1 = malloc(sizeof(int)*n);

    printf("Enter the elements of the array#1: ");
    for (i = 0; i < n; i++){
    scanf("%d", &a1[i]);
    }

    printf("Enter the length of the array#2: ");
    scanf("%d", &n2);
    a2 = malloc(sizeof(int)*n2);

    printf("Enter the elements of the array#2: ");
    for (i = 0; i < n2; i++){
    scanf("%d", &a2[i]);
    }

您可以使用常规数组表示法访问a1指向的值,但应添加一些边界检查以确保用户未指定n / n2边界之外的数组索引。