1

好的,我必须编写一个接受 2 个或更多参数的程序,并在第二个和剩余的参数中搜索匹配的参数。
例如输出将是:

./a 3 h 4 9 3  
3 found  

或者

./a hsi and iash me 34 hsi  
hsi found  

到目前为止,我有这个,而且我很确定这里有很多垃圾,在这种情况下是无用的。提供的任何帮助将不胜感激!:

int linear_search (const char*A[], char*x, int v ){  
    int i;  
    i = 0;  
    while ( i < v - 1){  
        if  (A[i] == x){  
            return 1;  
        }  
        return 0;  
    }  
}  

int main (int argc, char*argv[]){  
    int size = argc - 1;  
    char*A[size];  
    char*x = argv [1];  
    int i;  
    int v = argc - 2;  

    i = 0;  
    while ( i < v ){  
        A[i] = argv [i + 1];  
        i = i +1;  
    }  

    if (linear_search (A, v, x)){  
        printf ("%s found\n", x);  
    } else {  
        printf ("%s not found\n", x);  
    }  
}  

每当我通过编译器运行程序时,我都会收到警告:从不兼容的指针类型传递 'linear_search' 的 arg 1。
警告:传递 'linear_search' 的 arg 2 使指针从整数而不进行强制转换。

这意味着什么?

4

3 回答 3

1

这就是我的做法。您不需要单独的线性搜索功能。

#include <stdio.h>
#include <string.h>
int main (int argCount, char *argVar[]) {
    int i;
    if (argCount < 3) {
        fprintf (stderr, "Usage: argfind <argToFind> <otherArg> ...\n");
        return 1;
    }
    for (i = 2; i < argCount; i++) {
        if (strcmp (argVar[1], argVar[i]) == 0) {
            printf ("'%s' found in argument %d\n", argVar[1], i);
            return 0;
        }
    }
    printf ("'%s' not found\n", argVar[1]);
    return 0;
}
于 2009-04-15T04:10:04.077 回答
0

我认为问题出在线性搜索函数中……看起来您只是在比较指针以查看它们的字符串是否相同。

if (A[i] == x) 

C 不能那样工作。所做的只是检查指针地址是否相同。您需要使用 strcmp() 函数来检查实际字符串是否相同。

我还建议对变量进行更具描述性的命名,这会使事情更容易阅读。:)

于 2009-04-15T04:17:06.010 回答
0
  • 的调用linear_search与声明不匹配。如果不是彻底的错误,这至少应该给你警告。

    声明是:

    linear_search (const char*A[], char*x, int v )

    而调用是:

    linear_search (A, v, x)

    最后两个参数真的应该交换。

  • 此外,您不能使用==运算符来匹配 C 中的字符串。您必须使用strcmpstrncmpmemcmp. 之一

  • 您可能需要开始复制,如果您打算A从索引中使用2而不是第一个(这argv[ 1 ]是您正在搜索的键,将其放入A将始终返回匹配项,即使它在参数的其余部分中不存在列表)。

  • 注意在 C 中,您可以使用下标运算符将数组的一部分传递给函数,因此您不需要复制到数组A。您可以将其&argv[ 2 ]作为 的第一个参数linear_search

于 2009-04-15T04:27:30.150 回答