将参数与第一个参数匹配

时间:2009-04-15 04:04:16

标签: string pointers arguments iteration

好的,我必须编写一个接受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使得整数指针没有强制转换。

这是什么意思?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我认为问题在于线性搜索功能......看起来你只是比较指针,看它们的字符串是否相同。

if (A[i] == x) 

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

我还建议您更加描述性地命名变量,这样可以更容易阅读。 :)

答案 2 :(得分:0)

  • linear_search的调用与声明不符。如果不是完全错误,这至少应该给你警告。

    声明是:

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

    而调用是:

    linear_search (A, v, x)

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

  • 此外,您无法使用==运算符来匹配C中的字符串。您必须使用strcmpstrncmpmemcmp中的一个。“< / p>

  • 如果您打算使用索引A中的2而不是第一个(argv[ 1 ]是您要搜索的密钥,则可能需要开始复制,将它放在A中将始终返回匹配,即使它不在参数列表的其余部分中的任何其他位置。)

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