如何从数组中删除元素并打印剩余的内容?

3
我想要在从数组中删除数字42后将数组原样打印出来。以下是可以正常运行的代码,但我无法确定如何删除此一个元素并打印其余元素。
#include <stdio.h>
int main()
    {
        int i,a;
        int arr[]={1,2,42,88,99};
        a=sizeof(arr);
        for(i=0;i<=a;i++)
        {
            printf("%d\n", arr[i]);
            if(arr[i]==42)
                break;
        }
        return 0;
    }
    `

在C语言中,你不能修改数组。你必须“删除”它吗?还是只是不能打印它? - Arc676
2
你不能轻易地从数组中“删除”一个元素。你需要将所有后续元素向下移动一个插槽。在打印数组的循环中,直接“跳过”该元素会更有效率。 - Jonathon Reinhart
无法回答您的问题,因为它基于错误的假设:您根本不能从数组中删除(或添加)任何元素。它的大小是固定的。 - Frerich Raabe
5个回答

4

在编写代码之前,您需要知道您需要什么以及如何编写它。

以下事项应该得到解决:

a=sizeof(arr);

为获取数组的长度,您需要:
a=sizeof arr / sizeof arr[0];

接下来是这个for循环:
for(i=0;i<=a;i++){}

在这里,您需要检查是否 i < a,但不需要检查 i 是否等于 a,如 i == a。请将其更改为:

or(i=0;i<a;i++){}

并在此处:

if(arr[i]==42)
    break;

您不需要停止循环,您需要的是跳过该数字,这意味着您需要在此处使用continue而不是break

if(arr[i]==42){
    continue;
}

最后一件事,将printf("%d\n", arr[i]);移到if之后。

现在把所有东西放在一起,你就会得到这个:

#include <stdio.h>

int main(void){
    int i,a;
    int arr[]={1,2,42,88,99};
    a=sizeof arr / sizeof arr[0];

    for(i=0;i<a;i++){
        if(arr[i]==42){
            continue;
        }
        printf("%d\n", arr[i]);
    }
        return 0;
}

输出:

1
2
88
99

@MadPhysicist 眼力真好 :D - Michi

1

首先:

a = sizeof(arr) / sizeof(int);

然后是 i < a,不是<=

最后,你需要使用continue而不是break

并且你需要在printf之前放置if。


2
我使用 #define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0])) - Jonathon Reinhart
1
更好的写法:#define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) - mikedu95
2
@JonathonReinhart 我使用一个稍微简短的版本 (sizeof(x) / sizeof *(x)). - Frerich Raabe

0

你只需要使用 continue 跳过 42

 if(arr[i]==42)
     continue;
 }
 printf("%d\n", arr[i]);

在这些更改后,它仍然打印42。 - Amol Sehgal
不可能。要贴上全新的代码吗?我想你仍然保留了你的第一个printf,也就是说,在循环中现在有两个printf。摆脱第一个printf。 - mikedu95
不可能吗?不是。不可思议吗?绝对是。 - Mad Physicist
有一个小错误,导致打印出了“42”。已经修复。感谢@MadPhysicist。 - Amol Sehgal

0

在这里编写一段代码,用于删除给定的数组元素。代码如下:

    //delete elements
countDel=0;
for(i=0;i< n;i++)
{
    if(arr[i]==num)
    {
        countDel++;
        //shift all other elements up
        for(j=i;j< n;j++){
            arr[j]=arr[j+1];
        }
    }
}

0
你可以尝试这个。
#include <stdio.h>
int main()
{
    int i,a;
    int arr[]={1,2,42,88,99};
    a=sizeof(arr)/sizeof(arr[0]);
    for(i=0;i<a;i++) 
        if(arr[i]!=42) printf("%d\n", arr[i]);
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接