首页 > 解决方案 > 在 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)。有什么提示我做错了吗?

标签: c

解决方案


函数中的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您的函数的语句。


推荐阅读