2009-04-15 4 views
1

두 개 이상의 인수를 허용하는 프로그램을 작성하고 일치하는 인수에 대해 두 번째 및 나머지 인수를 검색해야합니다.
예를 들어, 출력은 다음과 같습니다첫 번째 인수와 인수를 일치 시키십시오.

./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'의 인수 1을 전달합니다.
경고 : 'linear_search'의 arg 2를 전달하면 캐스트가없는 정수의 포인터가됩니다.

그 의미는 무엇입니까?

+0

누군가가 이것을 좀 더 읽기 쉽게 만들 수 있습니까? 내 담당자가 내 자신을 할 너무 낮습니다 : ( – Nathan

+0

많이 감사 : – Nathan

답변

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

+0

숙제 인 경우 질문에 숙제 표를 붙였습니다. 그렇지 않으면 지침보다는 답변을 얻을 수 있습니다. 그러나 위의 코드는 문제를 보여줍니다. ==가 아닌 strcmp와 문자열을 비교해야합니다. == 포인터가 아닌 포인터를 비교합니다. – paxdiablo

0

선형 검색 기능에 문제가 있다고 생각합니다. 포인터가 동일한 지 비교하기 위해 포인터를 비교하는 것처럼 보입니다.

if (A[i] == x) 

C는 그렇게 작동하지 않습니다. 모든 것은 포인터 주소가 같은지 확인합니다. 실제 문자열이 같은지 확인하려면 strcmp() 함수를 사용해야합니다.

변수 이름을 좀 더 구체적으로 지정하는 것이 좋습니다. 그러면 훨씬 쉽게 읽을 수 있습니다. :)

+0

strcmp()는 어떻게 사용합니까? 내가 말할까요? [i] strcmp (x) ???? – Kaity

+0

@Kaity : "if (strcmp (A [i], x) == 0) {...}"- 위의 코드에 예제가 나와 있습니다 (지금은 미래에 아래에있을 수도 있습니다 :-). strcmp()는 두 char *를 취하여 equal 또는 -1에 대해 0, arg1에 대해 +1을 각각 반환합니다. arg2. 귀하의 경우에만 0에 대해 걱정할 필요가 있습니다. – paxdiablo

0
  • linear_search의 호출이 선언과 일치하지 않습니다. 이것은 명백한 오류가 아니라면 적어도 경고를 제공해야합니다.

    선언은 다음과 같습니다 호출이

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

    반면 :

    linear_search (A, v, x)

    마지막 두 인수는 정말 교환해야한다.

  • 은 또한 당신은 당신이 strcmp 중 하나 strncmp 또는 memcmp .`

  • 당신이 A을 사용하려는 경우 당신은 아마, 복사를 시작하는 데 필요한을 사용해야합니다 C에서 문자열을 일치하도록 == 연산자를 사용할 수 없습니다 첫 번째가 아닌 2의 인덱스 (argv[ 1 ]은 검색하려는 키입니다. A에 입력하면 나머지 인수 목록에없는 경우에도 항상 일치가 반환됩니다).

  • 참고 C에서 하위 연산자를 사용하여 배열의 일부를 함수에 전달할 수 있으므로 배열 A에 대한 복사가 필요하지 않습니다. linear_search의 첫 번째 매개 변수로 &argv[ 2 ]을 방금 완료했을 수 있습니다.

관련 문제