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

时间:2013-07-10 12:34:53

标签: 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");
   }
}

我们怎么知道1中的第二个array是我们找到的最后一个1? 我的意思并不是保留最后1的值,我的意思是我们应该怎么知道第二个1是最后一次出现,不再出现?

3 个答案:

答案 0 :(得分:20)

您可以按相反的顺序循环:

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;
}

Codepad

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

  • 包括初始化。
  • 数组的大小独立性。
  • 快速两种方式:Short-circuit behavior&amp;&amp;,--i将在需要时执行。
  • 较小的代码(已移除if()break)。

答案 1 :(得分:2)

您可以跟踪找到“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);

答案 2 :(得分:2)

设置一个等于0&amp;的计数器每次找到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);