0

如何从 C 中的线性搜索中打印多个搜索?

for (i=0; i < index; i++)
   if (array[i] == target)
          return i;

是否可以返回一个以上的值,例如,如果数组有多个等于目标的元素?

4

2 回答 2

2

您可能会遇到在函数中分配动态数组的麻烦,但这可能最好留给调用者来管理。

我会改变这样的功能:

int findVal (int *array, int size, int val) {
    for (int i = 0; i < size; i++)
        if (array[i] == val)
            return i;
    return -1;
}

到一个允许您指定起点(或者更准确地说,比起点少一个):

int findVal (int *array, int size, int last, int val) {
    for (int i = last + 1; i < size; i++)
        if (array[i] == val)
            return i;
    return -1;
}

然后让您的客户调用它:

int index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), -1, myval);
while (index != -1) {
    // Do something with index.
    index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), index, myval);
}

如果您的客户希望将其放入数组中,他们可以将其放入数组中。但是,如果他们只是想做一些短暂的事情(比如只打印索引然后忘记它),那么为此浪费一个数组是没有意义的。

于 2011-03-01T03:57:40.120 回答
1

您可以打印出它们的索引值(允许打印多个值)或将它们插入数组然后返回,而不是返回匹配的元素。

于 2011-03-01T03:46:03.720 回答