Avatar billede ferdinand.k Mester
25. oktober 2002 - 15:06 Der er 3 kommentarer og
2 løsninger

sammenligning af strenge...

jeg har en sammenligningsfunktion der fungerer. Her sammenligner jeg én streng af char's. Mit problem er at skulle sammenligne flere streng. Det er som int værdier.

Her er lidt kode:

int find_vare(char *s, struct vare *kp)
{
  while(fread(kp, sizeof(struct vare), 1, fp) == 1)
    if (strcmp(s, kp->navn) == 0)
    return TRUE;

  return FALSE;

}

Som det kan ses søger jeg i "navn" men jeg skal også gerne søge i nummer f.eks... Hvorledes kan dette se ud?
Avatar billede arne_v Ekspert
25. oktober 2002 - 15:14 #1
Måske:


                            int find_vare(char *s1, char *s2struct vare *kp)
                            {
                              while(fread(kp, sizeof(struct vare), 1, fp) == 1)
                                if ((strcmp(s1, kp->navn1) == 0) && (strcmp(s2, kp->navn2) == 0))
                                return TRUE;

                              return FALSE;

                            }

og:


                            int find_vare(int v, struct vare *kp)
                            {
                              while(fread(kp, sizeof(struct vare), 1, fp) == 1)
                                if (v == kp->nummer)
                                return TRUE;

                              return FALSE;

                            }
Avatar billede ferdinand.k Mester
25. oktober 2002 - 15:27 #2
er der ikke anden måde at gøre det på? Det første kode jeg havde sammenligner godt nok 2 strenge. Jeg skal bare sammenligne 2 mere...????!!!!
Avatar billede arne_v Ekspert
25. oktober 2002 - 15:37 #3
Måske:

struct keys { char navn1[10]; char navn2[10]; char navn3[10]; };

struct vare { struct keys k; int nummer1; int nummer2; };

int find_vare(struct keys k, struct vare *kp)
{
    while(fread(kp, sizeof(struct vare), 1, fp) == 1)
        if (memcmp(k, kp->k, sizeof(struct keys)) == 0)
                return TRUE;
    return FALSE;
}
Avatar billede arne_v Ekspert
25. oktober 2002 - 15:39 #4
Hvis du bruger den løsning som nemt kan sammenligne
mange felter, så husk at få alle chars i strenge sat til nul.
Ellers kan memcmp ikke testet rigtigt.
Avatar billede soepro Nybegynder
15. november 2002 - 11:38 #5
Hvad er dit egentlige problem ? Skal du finde data, hvor et givet indhold kan stå i et eller flere felter ?

I så fald kunne du måske bruge noget der ligner dette (strstr checker bare om søgeteksten står et eller andet sted i navn/nummer):

int find_vare(vare *pVare, char *s, ...)
{
  va_list argv;
  char  *arg;
 
  while (fread(pVare, sizeof(*pVare), 1, fp) == 1)
  { // Positioner til første søgestreng.
    va_start(argv, s);

    // Smut igennem listen af søgeord.
    while ((arg = va_arg(ap, char)) != NULL) {
      if (strstr(pVare->navn, arg)  != NULL
      ||  strstr(pVare->nummer, arg) != NULL)
    {
      return TRUE;
    };
    // Gør klar til at starte forfra.
    va_end(argv);
  };
  return FALSE;


Du kan så søge sådan her:

1) find_vare(&Vare, "mælk", "Øl", "Juice", "Sodavand");
2) find_vare(&Vare, "boller");
3) find_vare(&Vare, "Mel", osv. )

1 vil finde både "LetMælk", "SødMælk", "KærneMælk" osv., 2 både "Bamseboller", "Krydderboller" osv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester