gpt4 book ai didi

c - 查找 int 数组中第一次出现的位置

转载 作者:行者123 更新时间:2023-11-30 18:27:51 24 4
gpt4 key购买 nike

我正在尝试编写一个函数int* findPair(int* data, int numEls, int first, int secondary)在int数组数据中搜索等于first的元素,紧接着是第二个元素。如果发生这种情况,函数首先返回指向该元素的指针。如果该情况在数组中出现多次,则指针应指向第一次出现的位置。我的代码是这样的:

#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)。有任何提示我哪里做错了吗?

最佳答案

forfindPair 中循环函数不会在第一次出现一对时停止。相反,它会继续搜索更多对,每当遇到一对时,它就会覆盖n。 。因此n将始终指向最后一次出现的位置(好吧,指向最后一次出现的第一个元素)。

您需要停止 for一旦找到第一个出现的地方就循环。

使用 break提前退出循环的语句:

for (i = 0; i < numEls; i++) {
if(data[i] == first && data[i + 1] == second) {
n = &data[i];
break;
}
}

当找到第一对时,n将被设置为指向一对中的第一个元素,循环将立即退出,跳转到 return声明你的功能。

关于c - 查找 int 数组中第一次出现的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com