C 在数组中获取数量数据

C++ getting number of data in an array?

本文关键字:数据 获取 数组      更新时间:2023-10-16

我在这里有一个简单的数组:

int someNumbers[10] = { 16, 2, 77, 40, 12071 };

如何在数组中获取数据数?由于数组设置为10,但是内部只有5个数据。

我所期望的结果应该是这样的:

int icount = sizeof(someNumbers); // This is wrong, but I have no idea how..
cout << icount << endl;

我需要iCount才能返回5而不是10。我该怎么做?

这将是:

#include<iostream>
using namespace std;
int main(){
    int someNumbers[10] = { 16, 2, 77, 40, 12071 };
    int count = 0;
    int i = 0;
    for(i = 0; i < sizeof(someNumbers) / sizeof(int); i++){
        if(someNumbers[i]){
            count = count + 1;
        }
    }
    cout << count << endl;
    return 0;
}

我单独使用if(someNumber[i]),因为只要somenumber [i]不确定,这将返回true。因此,这有效。

这是输出:

5

您总是可以使其成为这样的单独函数:

#include<iostream>
using namespace std;
int dataInArray(int someNumbers[], int size);
int main(){
  int someNumbers[10] = { 16, 2, 77, 40, 12071, 2};
    int count = dataInArray(someNumbers, 10);
    cout << count << endl;
  return 0;
}
int dataInArray(int someNumbers[], int size){
    int count = 0;
    int i = 0;
    for(i = 0; i < size; i++){
        if(someNumbers[i]){
            count = count + 1;
        }
    }
    return count;
}

由于您使用的是一个大小预定义的静态数组,因此您必须使用 for循环在数组中运行。请参阅此处的示例:

int someNumbers[10] = { 16, 2, 77, 40, 12071 };
int icount = 0;
for (int i = 0; i < 10; i++)
{
    if (someNumbers[i])
        icount++;
}
cout << icount << endl;

一些背景信息。如果用户未设置分配给此数组的一个内存块之一,则将存储一个空值。因此,如果我们执行if(isNumber[i]),则如果i处的someNumber填充有一个值,它将返回true,如果不填充值,它将返回false。

这就是我发布的代码中循环工作的方式。对于循环的每次运行,当if语句为true时(如果someNumber[i]具有值),则计数器会增加。

编辑:此解决方案正常;对于您的数组,它将输出5。它也适用于任何int数组;只需更改计数器以在少于您为数组分配的静态尺寸时运行即可。

编辑2:只要您的数组中没有零,该解决方案就可以正常工作,因为零将伪造if条件。在此Stackoverflow帖子中查看更多信息:在C 中查找数组中的元素计数。为了克服此障碍,建议您使用std :: vector或使用计数器变量并更新数组中的确切数量的内存位置,这些内存位置在此变量中填充。

您的要求是不可能的,因为根据语言规则,完全没有区别:

int someNumbers[10] = { 16, 2, 77, 40, 12071 };

int someNumbers[10] = { 16, 2, 77, 40, 12071, 0, 0, 0, 0, 0 };

他们两个都肯定初始化了所有十个元素。

如果您有兴趣找到第一个零(无论是由程序员键入还是由语言规则键入),则 @abusyprogrammer的答案将有所帮助。

如果您需要计算程序员键入的零,则必须让编译器从initializer the Initializer the Initializer the Initializer the Initializer the Initializer推断数组(或initializer_list),如 @kelm的答案显示。

无法检测程序员键入的零并指定数组大小。

使用以下:

int someNumbers[] = { 16, 2, 77, 40, 12071 };
cout << sizeof(someNumbers)/sizeof(int) <<endl;

这是因为sizeof(someNumbers)没有给您数组的计数,而是它所采用的字节总数。因此,将其除以sizeof(int),它将为您提供数组中的整数数量。

另外,如果您在声明数组时指定[10],则数组的计数将为10,无论它是否以较少的值初始化。上面显示的方式,使用一个空的[],它将根据指定的元素自动设置计数。

IDEONE链接

这应该做到:

int someNumbers[] = {1,2,3,4,5,6};
int icount = sizeof(someNumbers) / sizeof(int);