c - 在 int 数组中找到第一个出现的位置
问题描述
我正在尝试编写一个函数int* findPair(int* data, int numEls, int first, int second)
来在 int 数组数据中搜索等于第一个元素的元素,然后紧跟第二个元素。如果发生这种情况,该函数首先返回一个指向该元素的指针。如果这种情况在数组中多次出现,则指针应指向第一次出现。我的代码是这样的:
#include <stdio.h>
int* findPair(int* data, int numEls, int first, int second)
{
int i = 0;
int *n = NULL;
for (i = 0; i < numEls; i++) {
if(data[i] == first && data[i + 1] == second) {
n = &data[i];
}
}
return n;
}
int main()
{
int data[] = {1, 10, 2, 1, 2, 1, 2};
int* p = findPair(data, 7, 1, 2);
if (p != NULL) {
printf("Found at position %zd\n", p - data);
}
else {
puts("Not found");
}
}
当我输入两个1,2
进行测试时,它指向第二次出现(位置 5 而不是位置 3)。有什么提示我做错了吗?
解决方案
函数中的for
循环findPair
不会在第一次出现一对时停止。相反,它会继续搜索更多对,并且每当遇到一对时,它都会覆盖n
. 因此n
将始终指向最后一次出现(嗯,指向最后一次出现的第一个元素)。
您需要在for
找到第一次出现后立即停止循环。
使用break
语句提前退出循环:
for (i = 0; i < numEls; i++) {
if(data[i] == first && data[i + 1] == second) {
n = &data[i];
break;
}
}
当找到第一对时,n
将设置为指向一对的第一个元素,并且循环将立即退出,跳转到return
您的函数的语句。
推荐阅读
- hyperledger-fabric - 重新注册后对等或订购者重新加载
- python - Python - Pandas:给定行中最小值的数字/索引
- javascript - 通过 js 动态添加 DOM 元素,性能问题(DIV vs ListBox vs C#)
- python - matplotlib 动画不使用 imshow 进行动画处理
- php - 如何使用php在列表中回显结果
- java - 如何使用 Spring-data-mongodb 根据月份对日期进行分组并获取每个月的最新值?
- xamarin.forms - 添加到 Xamarin 表单的图像未显示
- python - Tensorflow 支持哪个版本的 python?
- c# - 为图表上的每个点分配一个可右键单击的菜单
- php - 在 WooCommerce 中添加自定义元数据并将其保存到费用中