我这里有一个简单的数组:
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.我怎么能这样做?
答案 0 :(得分:0)
由于您使用的是预定义大小的静态数组,因此您必须使用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])
,那么如果someNumber
的{{1}}填充了某个值,它将返回true,如果未填充值,则返回false。
这就是for-loop在我发布的代码中的工作原理。对于循环的每次运行,当if语句为真时(如果i
有值),则计数器递增。
编辑2:只要数组中没有零,此解决方案就会起作用,因为零将伪造if条件。请参阅此stackoverflow帖子中的更多内容:Find the count of elements in array in C++。要克服这个障碍,建议您使用std :: vector,或使用计数器变量并更新数组中手动填充此变量的确切内存位置数。
答案 1 :(得分:0)
这样做:
#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;
}
答案 2 :(得分:0)
你要求的是不可能的,因为根据语言规则,之间没有任何区别:
int someNumbers[10] = { 16, 2, 77, 40, 12071 };
和
int someNumbers[10] = { 16, 2, 77, 40, 12071, 0, 0, 0, 0, 0 };
他们两个肯定都会初始化所有十个元素。
如果您有兴趣找到第一个零(无论是由程序员打字还是由语言规则暗示),那么@ ABusyProgrammer的答案将有所帮助。
如果你需要计算程序员键入的零,那么你必须让编译器推断出初始化程序中的数组(或注释中提到的initializer_list)长度,如@Kelm的答案所示。
无法同时检测程序员输入的零并指定数组大小。
答案 3 :(得分:-1)
使用此:
int someNumbers[] = { 16, 2, 77, 40, 12071 };
cout << sizeof(someNumbers)/sizeof(int) <<endl;
这是因为sizeof(someNumbers)
没有给出数组的计数,而是它给出的总字节数。因此将其除以sizeof(int)
,它将为您提供数组中的整数数。
此外,如果在声明数组时指定[10]
,则数组的计数将为10,无论是否使用较少的值进行初始化。上面显示的方式是空[]
,它将根据指定的元素数自动设置计数。
答案 4 :(得分:-4)
这应该这样做:
int someNumbers[] = {1,2,3,4,5,6};
int icount = sizeof(someNumbers) / sizeof(int);