我需要从数组中删除一系列元素,但是我不知道如何做。我尝试了这个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(" ");
}
答案 0 :(得分:0)
您有:
n
和n2
给出数组的大小,而无需先初始化这些变量。尽管您尚未初始化数组,但是如果初始化了,由于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边界之外的数组索引。