假设我有一个数组
bool string[N]={false};
执行某些操作后,数组字符串的所有元素都变为true。 我想在if语句中检查这种情况,如下所示: -
伪代码 -
if(all the elements of string are same or equal)
then do this
我如何实现这一点?我不应该使用像
这样的计数器for(int i=0;i<N;i++) //or something else like this
答案 0 :(得分:5)
if (memcmp (&string [0], &string [1], sizeof string [0] * (N - 1)) == 0)
{
/* all elements the same */
}
N-1停止超越缓冲区的末尾。
memcmp将字符串[0]与字符串[1]进行比较,然后将字符串[1]与字符串[2]进行比较,然后将字符串[2]与字符串[3]进行比较,依此类推,直至字符串[n-2]和字符串[N-1]。
答案 1 :(得分:0)
如果你可以使用指针,那么它可能是这样的:
bool first = string[0];
bool* current = string + 1;
bool* end = string + N;
bool allEqual = true;
while (current < end)
{
if (*current != first)
{
allEqal = false;
break; // No need to loop more
}
++current;
}
if (allEqual)
std::cout << "All elements are " << std::boolalpha << first << '\n';
else
std::cout << "First not-equal is at index " << (current - string) / sizeof(string[0]) << '\n';
与使用索引真的没什么不同,因为指针current
充当一种索引。
答案 2 :(得分:0)
“我不应该使用像for(int i=0;i<N;i++)
”这样的计数器〜&gt;你仍然需要编写一个检查所有元素的循环,你只需要避免使用临时int
变量进行索引。
int elementsAreEqual(int* first, int size) {
int* current = first;
int* last = first + size - 1;
while (1) {
if (*current != *first)
return 0;
if (current == last)
break;
current++;
}
return 1;
}
用作:
const int N = 5;
int values[] = {0,0,0,0,0};
if (elementsAreEqual(values, N))
printf("Elements are equal.\n");
else
printf("Elements are not equal.\n");
答案 3 :(得分:0)
如果您只想使用一个if和no循环进行检查,则可以尝试以下操作:
bool string[N] = {false};
if ((0 == memcmp(&string[0], &string[1], sizeof(string[0]) * (sizeof(string) - 1))) {
//equal
}
因为两个存储区重叠,偏移一个,所以比较数组中的每一对。