簡體   English   中英

獲取它在數組中具有值的元素數

[英]Get the number of elements that it has a value in array

我有一個如下的數組

int arr[32];

該數組可以包含32個元素。
如果我將一些數據添加到該數組中,如下所示

arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;

如您所見,我將數據添加到元素0,1,2,3 ,而其他元素仍未初始化或為空。

現在,如何獲取僅包含數據的元素計數?

在當前示例中,將獲得4個元素。

您可以通過多種方式執行此操作-一種是保持初始化值的計數:

arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
n = 4;

僅當您順序填充數組時,此方法才有效。

另一種方法是使用一些值初始化數組,這些值在語義上不能成為數組的元素:

int arr[32] = {-1};

之后,您可以檢查當前元素是否包含不同於-1值。

示例循環可以這樣實現:

for(i = 0; i < 32 && arr[i] != -1; i++)
{
   // do things
}

另外,正如@Jongware在評論中指出的那樣-如果您不介意花費O(n)的額外空間-您可能會有其他標志數組:

int fill[32] = {0};
arr[0] = 5;   fill[0] = 1;
arr[1] = 10;  fill[1] = 1;
arr[2] = 15;  fill[2] = 1;
arr[3] = 20;  fill[3] = 1;

如果這對您很重要,則可以使用位集節省一些空間。

int arr[32]={0};
int c=0;
arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
for(int i=0; i<32; i++){
    if(arr[i]){
            c=c+1;
              }
printf("count is %d",c);
}

這就是我會嚴格列出可能分配的元素的方式。 這將創建一次寫入數組。

int arr[32];

int assignedOrder[32];
int assignedOrderIndex = 0;

int assign (int index, value)
{
   int i;
   if (index < 0 || index >= 32)
     return E_FAIL;
   if (assignedOrderIndex == 32)
     return E_FAIL;
   for (i=0; i<assignedOrderIndex; i++)
     if (assignedOrder[i] == index)
       return E_FAIL;
   arr[index] = value;
   assignedOrder[assignedOrderIndex] = index;
   assignedOrderIndex++;
   return E_SUCCESS;
}

某種程度上,這似乎是您應該升級到C ++的感覺,因為有些標准對象恰好具有此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM