2009-04-15 53 views
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会使整数指针无法投射。

这是什么意思?

+0

有人可以编辑它,使其更具可读性?我的代表太低,不能做到我的自我:( – Nathan 2009-04-15 04:10:53

+0

非常感谢:) – Nathan 2009-04-15 04:17:46

回答

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; 
} 
+0

我们没有被教导或正在使用你使用的很多东西......虽然感谢! – Kaity 2009-04-15 04:18:54

0

我认为这个问题是在线性搜索函数中......看起来你只是比较指针来查看它们是否相同。

if (A[i] == x) 

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

我也建议您在描述性地对变量进行命名,这会让事情变得更容易阅读。 :)

0
  • 调用linear_search与声明不匹配。这应该至少给你警告,如果不是彻底的错误。

    的声明是:

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

    而调用是:

    linear_search (A, v, x)

    最后两个参数应该被交换。

  • 你也不能使用==操作以匹配字符串C.你将不得不使用的strcmp一个,strncmpmemcmp .`

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

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