我有一个数组:
int data[5] = {0,1,0,0,0};
我想检查data
的所有元素是1
还是0
。我用for loop
尝试过,但没有解决。
int control = 0;
for(a=0; a<5; a++){
if(data[a] == 1) control = 1;
}
有可能吗?谢谢。 (我对C来说很新)
答案 0 :(得分:1)
您可以使用std::all_of
和std::any_of
#include <algorithm>
int data[5] = {0,1,0,0,0};
if ( std::all_of(std::begin(data), std::end(data), [](int i){return i == 0;}) )
{
std::cout << "All values are zero";
}
if ( std::all_of(std::begin(data), std::end(data), [](int i){return i == 1;}) )
{
std::cout << "All values are one";
}
好消息是这些函数表现出short-circuiting行为,因此他们不必(必然)检查每个元素。
答案 1 :(得分:1)
和C版本:OP说我想检查数据的所有元素是1还是0。
int data[5] = {0,1,0,0,0};
int a, zeros=0, ones=0;
for (a=0; a<5; a++) {
if (data[a] == 0) zeros++;
if (data[a] == 1) ones++;
}
if (zeros == 5)
printf ("All elements are 0\n");
else if (ones == 5)
printf ("All elements are 1\n");
else if (ones+zeros == 5)
printf ("All elements are 1 or 0\n");
else
printf ("Some elements are not 1 or 0\n");
答案 2 :(得分:0)
试试这个: -
int control = 0;
for(a=0; a<5; a++)
{
if(data[a] == 1 || data[a]==0)
control++;
}
if (control == 5)
{
cout<<"The array only contains 1 and 0";
}
else
{
cout<<"The array contains elements other than 0's and 1's";
}
答案 3 :(得分:0)
您可以在for循环中执行此操作。你只需要一些跟踪结果的方法。您可以有两个表示true或false的变量。如果您假设数组全部为零或全部为1,则可以将标志设置为true。然后在for循环中,如果发现矛盾,请将相应的标志设置为false。在这种情况下,我只使用int 0表示FALSE,int 1表示TRUE;
int data[5] = {0,0,0,0,0};
int all_zero = 1;
int all_ones = 1;
for(i = 0; i < 5; i++){
if(data[i] == 1){
all_zero = 0;
}
else{
all_ones = 0;