假设我有一个数组
bool string[N]={false};
执行一些操作后,数组字符串的所有元素都变为真。我想在 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
假设我有一个数组
bool string[N]={false};
执行一些操作后,数组字符串的所有元素都变为真。我想在 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
PP 只需要稍微修改一下他的代码,他所暗示的答案是:-
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]。
如果您只想使用一个 if 循环而不是循环来检查它,您可以尝试以下操作:
bool string[N] = {false};
if ((0 == memcmp(&string[0], &string[1], sizeof(string[0]) * (sizeof(string) - 1))) {
//equal
}
因为两个内存区域重叠,偏移一个,所以数组中的每一对都被比较。
如果你可以使用指针,那么它可能是这样的:
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
充当一种索引。
“我不应该使用像for(int i=0;i<N;i++)
” ~> 这样的计数器,您仍然需要编写一个检查所有元素的循环,您只需要避免使用临时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");