2011-07-16 52 views
1

我有一个数组变量,说中的示例: -如何查找数组中存在的元素的数量?

int a[10]; 

并假设我已经加入4-元件说1,2,3,4开始从a[0]直到a[3]。 现在我该如何发现数组变量a中存在多少元素,其最大大小为10

我的方式来获得在阵列假设用户在元素的数量将会给输入大于或等于零: -

#include<iostream> 
using namespace std;  
#define SIZE 10 
int main(){ 
    int *a = (int*)malloc(sizeof(int)*SIZE); 
    int iCount=0; 
    int iNumberOfElements,iElements; 
    cout<<"\nEnter the number of elements to be entered:"; 
    cin>>iNumberOfElements; 
    cout<<"\nEnter the elements(Please enter elements greater than or equal to zero):\n"; 
    for (int jIndex = 0; jIndex < iNumberOfElements; jIndex++){ 
     cin>>iElements; 
      while(iElements<0){ 
       cout<<"\nPlease enter the element greater than or equal to Zero.\nRe-enter:\n"; 
       cin>>iElements; 
     } 
     a[jIndex] = iElements; 
    } 
    for(int iIndex=0;iIndex<SIZE;iIndex++){ 
     if(a[iIndex] >= 0){ //I am checking in this way assuming that user will give input >= 0 
      iCount++; 
     } 
    } 
    cout<<"\nThe total number of element present in the array is:"<<iCount<<endl; 
    return 0; 
} 

回答

4

你必须建立在该公约自己。例如,你可以将整个数组初始化为一个魔术常数,表示“不在使用”,或者你可以通过一个单独的变量追踪长度。

无论哪种方式,框架根本无法帮到你,没有办法。对于所有的意图和目的,数组有10个元素,无论你是否设置它们。

+0

是否存在任何其他方式来判断哪个位置包含垃圾值? – Abhineet

+2

号有两种方法可以初始化数组,或者不使用。当你声明它时,它包含随机垃圾,或者它包含一个常用常量,通常为0(因为它是一个* int *数组)。无论哪种方式,你自己必须跟踪你是否设置了一个元素。没有标志或位,或者任何可以告诉你是否设置了数组元素的内容。如果数组元素在声明时被初始化为0,并且您必须检查以确保(并且我的意思是检查编译器文档,而不是现在会发生什么*发生),那么您可以使用0作为魔法值。 –

+1

这个较旧的Stackoverflow线程,[如何在C中初始化一个数组],(http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c/201116#201116),很好讨论将数组的所有条目设置为相同的值(如果零是“魔术”值,则最简单)。 – hardmath

1

通过

int a[10]; 

您已经为10个整数,显示不确定值(或0,如果数组有静态存储持续时间)分配空间。当你说

我添加了4个元素1,2,3,4说从一开始[0]至[3]

你可能意味着您分配值的元素。所以,他们没有以任何其他方式标记。 您可以将所有元素设置为-1,以便您可以确定是否已分配给它们,但要小心 - 您无法知道数组的结束位置! (只有在C++中可以使用函数模板并将数组作为参数传递给数组。)

+0

没有其他替代方法可以用我已经完成的方式。 – Abhineet

1

不使用计数器或使用默认值设置表, 如果元素是通过在指针使用表的地址,然后计算两者之间的差增加或由步骤删除步骤:

int a[10],*ptr=a; 
*ptr=1; 
*++ptr=2; 
*++ptr=3; 
*++ptr=4; 
printf("start addr : %p\ncurrent addr %p\n", 
     a,ptr); 
printf("present in a : %d rest : %d\n",ptr-a+1,&a[9]-ptr); 
-1

可以定义保持跟踪静态或易失性可变多少数量存在于阵列或初始化。 在下面的程序j保持轨道号的在阵列的

int main() 
     { 
     int a[10]; 
     static int j=0; 
     do{ 
      scanf("%d",&a[i]); 
      if(a[i]>=0) 
       j++; 
      }while(a[i++]>=0); 

     } 
+0

这不是正确的方法。这不会工作。 – Abhineet

+0

您必须为变量添加一些约束值 –

+0

如果您的值为0,特定位置会怎么样?这种方法无法解决。我期待......可以告诉我们如何找到不同的黑白用户输入值和垃圾值。 – Abhineet

-1

元件的一个阵列中的数可以通过使用一个简单的循环

int i=0,count=0; 
for(i=0;i<10;i++) 
{ 
    if(a[i]!='/0') 
    { 
     count++; 
    } 
} 

这里i是整数变量,计数来计算用于计算元素的数量。假设数组的最大尺寸为10,则使用值“10”。如果仅将大小为10的数组输入4个元素,则此代码将返回计数4.

+0

这工作正常,如果我声明数组变量为'int a [10] = {};'或'int a [10] = {1,2,3}'等 它不能正常工作,如果我声明变量作为'int a [10];'而不是给出输入或'int * a =(int *)malloc(sizeof(int)* 10);'。 在许多情况下,它不起作用。 – Abhineet

+0

另外,如果我给'0'作为特定位置的用户输入,那么结果是错误的。离开它,我知道没有办法找到不同的黑白用户输入和垃圾值。 – Abhineet