C 在数组中获取数量数据
C++ getting number of data in an array?
我在这里有一个简单的数组:
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);
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 如何在 C++ 中获取中继器的委托数据?
- 从 Rcpp Catch 测试中获取有关"inst/extdata"的数据
- C++ - 忽略并从其他文件获取数据
- 如何获取C++字符数据类型的地址
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 很好的语法来获取对向量/数组数据的大小引用?
- 如何从网站获取数据并将其传输到数据库?
- 获取文件数据预处理器宏
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 如何在新的派生对象中获取基本对象的数据?
- 如何从 CSV 获取数据并将其存储在 C++ 中的表对象中
- 如何使用CAPL的诊断功能获取CAN传输的数据(256字节)?
- 获取 R 数据帧的内存地址
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 从更改日志获取最新的 USN 数据
- 套接字:在没有memcpy的情况下,使用recvfrom将UDP数据获取到字对齐的缓冲区
- 如何将控制台输出数据获取到命令提示符下
- 将零mq消息数据获取到std::vector<char>
- 从指定坐标[x, y]处的位图数据获取像素颜色