Match argumenter til første argument

stemmer
1

Ok jeg har til å skrive et program som godtar 2 eller flere argumenter og søker andre og gjenværende argumentene for en matchende argument.
for eksempel resultatet ville være:

./a 3 h 4 9 3  
3 found  

eller

./a hsi and iash me 34 hsi  
hsi found  

Så langt jeg har dette, og jeg er ganske sikker på at jeg har fått mye søppel her inne som er ubrukelig i den situasjonen. Enhver hjelpen ville være verdsatt !:

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);  
    }  
}  

Når jeg kjører programmet gjennom kompilatoren får jeg advarsel: passerer arg en av 'linear_search' fra uforenlige pekeren type.
advarsel: passerer arg 2 av 'linear_search' gjør pekeren fra heltall uten et støpt.

Hva betyr det?

Publisert på 15/04/2009 klokken 04:04
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Her er hvordan jeg ville gjøre det. Du trenger ikke en egen lineær søkefunksjon.

#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;
}
Svarte 15/04/2009 kl. 04:10
kilden bruker

stemmer
0

Jeg tror problemet er i den lineære søkefunksjonen ... Det ser ut som du bare sammenligne pekere for å se om de strengene er de samme.

if (A[i] == x) 

C virker ikke sånn. Alt som gjør er å sjekke for å se om pekeren adressene er de samme. Du må bruke strcmp () -funksjonen til å kontrollere at den faktiske strengene er de samme.

Jeg anbefaler også jobber med å navngi dine variabler litt mer beskrivende, det gjør ting mye lettere å lese. :)

Svarte 15/04/2009 kl. 04:17
kilden bruker

stemmer
0
  • Det nærmest linear_searchikke samsvarer med erklæringen. Dette bør i det minste gi deg advarsler om ikke regelrett feil.

    Erklæringen er:

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

    mens anropet er:

    linear_search (A, v, x)

    De to siste argumentene bør egentlig byttes.

  • Også du ikke kan bruke ==operatøren å matche strenger i C. Du er nødt til å bruke en av strcmp, strncmpeller memcmp.`

  • Du må sannsynligvis starte kopieringen, hvis du har tenkt å bruke Afra indeksen 2og ikke den første (det argv[ 1 ]er nøkkelen du søker etter, setter den i Avil alltid returnere en kamp selv om den ikke er der noe annet sted i resten av argumentet liste).

  • Note i C, kan du bruke senket operatøren å passere del av tabellen til funksjonen, så du trenger ikke kopi til matrisen A. Du kunne bare ha gjort &argv[ 2 ]som den første parameteren linear_search.

Svarte 15/04/2009 kl. 04:27
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more