C++:检查数组的顺序
c++: check array's order
我试着写了一个bool函数,接受了一个数组和一个bool-dec。如果dec为true,函数会检查它是递减的,如果是递减的则返回true。如果dec为false,那么函数在升序时将返回true。
如果我用这个函数测试数组,它应该返回false,但它给出了true,我不知道为什么。有人能帮忙吗?谢谢
#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
bool isSorted(int array[], int size, bool dec) //false decending
{
bool check = true;
if (dec == false)
for (int i = 0; i<size; i++)
if (array[i]>array[i + 1])
{
check = false;
cout << "false";
}
else
for (int i = 0; i<size; i++)
if (array[i]<array[i + 1])
check = false;
return check;
}
int main() {
int n;
bool asc=true;
bool result;
int arr[] = { 1, 2, 4, 3, 0 };
n = 5;
result = isSorted(arr, n, asc);
cout << result;
system("pause");
}
您有一个off-by-one错误:当您到达最后一个元素,并且i
比size
少一个时,arrat[i+1]
引用的是经过数组末尾的元素。
由于将check
更改为false
是一条"单向街道",您可以通过在检测到错误的顺序时立即返回false
来简化您的功能;到达函数末尾时返回true
。
您还可以在循环中移动升序/降序检查,使代码更加统一:
for (int i = 0; i < size-1 ; i++) {
if (des && (array[i]<array[i + 1])
|| !des && (array[i]>array[i + 1])) {
return false;
}
}
return true;
传递给函数的值命名为asc
,而它的参数为dec
。再次检查你是否真的做了你想做的事。
如果访问超出数组边界,请将循环更改为
for (int i = 0; i < size-1; i++)
因此,当你进入size - 2
时,你可以比较最后两个元素,就完成了。
此外,您可以在发现异常后立即返回,而不是完成迭代。
相关文章:
- 按顺序声明的字符数组重叠
- C++ 替换字节数组中项的顺序
- 按字母顺序打印存储在字符数组中的信息
- 按字母顺序对结构内数组变量中的名称进行排序
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- C++按字母顺序排列的字符串数组
- 未按顺序出现在数组中的小写字母
- 如何在 c++ 中按字母顺序排列数组中的字符串?
- 如何在c++中更改数组的顺序
- 如何更改数组中2个对象的顺序
- 在 C++98/03 中以相反的顺序将 C 数组附加到向量,而无需 for 循环
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 按字母顺序排序字符数组,然后按长度排序
- 按顺序遍历 AVL 树,将值保存在数组中
- 如何加快非顺序数组填充
- 在几个顺序数组元素中输入相同的值