C 我们怎么知道这是数组中的最后一个元素?

C 我们怎么知道这是数组中的最后一个元素?,c,arrays,C,Arrays,我有以下代码: int array[5] = {1, 0, 1, 0, 0}; int i; for(i = 0; i < 5; i++) { if(array[i] == 1) { printf("found one\n"); } } int数组[5]={1,0,1,0,0}; int i; 对于(i=0;i

我有以下代码:

int array[5] = {1, 0, 1, 0, 0};

int i;

for(i = 0; i < 5; i++)
{
   if(array[i] == 1)
   {
      printf("found one\n");
   }
}
int数组[5]={1,0,1,0,0};
int i;
对于(i=0;i<5;i++)
{
if(数组[i]==1)
{
printf(“找到一个\n”);
}
}
我们怎么知道
数组中的第二个
1
是我们找到的最后一个
1

我的意思不是保留最后一个
1
的值,我的意思是我们如何知道第二个
1
是最后一次出现,不再出现?

您可以跟踪找到“1”的最后一个索引。例如:

int array[5] = {1, 0, 1, 0, 0};

int i;
int lastIndexOf=-1;

for(i = 0; i < 5; i++)
{
   if(array[i] == 1)
   {
       lastIndexOf=i;
       printf("found one\n");
   }
}
if(lastIndexOf!=-1)
    printf("last index of 1 : %d\n",lastIndexOf);
int数组[5]={1,0,1,0,0};
int i;
int lastIndexOf=-1;
对于(i=0;i<5;i++)
{
if(数组[i]==1)
{
lastIndexOf=i;
printf(“找到一个\n”);
}
}
如果(lastIndexOf!=-1)
printf(“1的最后索引:%d\n”,lastIndexOf);

您可以简单地按相反顺序循环:

for(i = 4; i >= 0; i--)
{
   if(array[i] == 1)
   {
      printf("last 1 found!\n");
      //break or do whatever you want
   }
}

我们可以进一步改进代码,如下所示:

int main(){
    int array[] = {1, 0, 1, 0, 0}, i;   
    for(i=sizeof(array)/sizeof(int)-1; array[i]!=1 && --i;); 
    printf("last 1 found at index = %d\n", i);
    return 1;
}

第二种形式的代码还有一些额外的好处:

  • 包括初始化
  • 阵列的大小独立性
  • Fast有两种方式:of&,
    --i
    将在需要时执行
  • 较小的代码(已删除
    if()
    break

将计数器设置为0,并在每次找到1时递增。当数组被完全解析后,您将知道哪一个1是最后一个1

int counter = 0;
int lastone = -1;
for(i = 0; i < 5; i++)
{
   if(array[i]==1)
   {
      counter++;
      lastone = i; 
      printf("found one\n");
   }
}
if(lastone!=-1)
   printf(" %d one is the last one %d", counter, lastone);
int计数器=0;
int lastone=-1;
对于(i=0;i<5;i++)
{
if(数组[i]==1)
{
计数器++;
lastone=i;
printf(“找到一个\n”);
}
}
如果(最后一个!=-1)
printf(“%d一个是最后一个%d”,计数器,最后一个);

也许您应该先对数组进行排序,这样如果更改了值,您就知道上一个值是最后一个值,您需要重新格式化此值。因此,你的问题不清楚。是否希望这样:“查找C数组中最后出现的整数1”?还是别的什么?问题标题的答案是“数组的最后一个元素是0”。是的,它正在尝试查找数组中最后出现的1。从末尾开始查找第一个出现的1如何?请看Maroun Maroun的答案:从结尾循环到开头。
1
的第一次出现本质上是数组中最后一次出现的
1
@User213136呢?您说“是的,它正在尝试查找数组中最后出现的1”。我们可以将其设置为:
for(i=sizeof(a);--i;)if(a[i])break;printf(“fount at%d”,i)
速度更快,大小更独立。我通常会去找编辑的另一个好答案,然后+1他;)您假设在位置
0
处始终存在
1
。我编辑了你的答案来解决这个问题。@marounnaroun谢谢,一定是滑倒了:)