Avatar billede zyxtem Nybegynder
21. juli 2003 - 14:11 Der er 1 kommentar og
2 løsninger

Funktion til at søge efter et ord i en streng

Hej, jeg prøver på at lave en funktion der kan gennemsøre en tekstreng efter et ord men har lidt problemer. Mit bedste bud ser sådanher ud men fungerer langt fra.

bool find_word(char ord[], char streng[])
{
    int count=0;

    for(count; streng[count]!=NULL; count++)
    {
       
if(((streng[count]==' ')&&(streng[++count]==ord[0]))||(streng[count]==ord[0])) // er en linie
   
{
        int i=0;
        int a=count;

        while((streng[a]==ord[i])&&(streng[i]!=' '))
        {
            i++;
            a++;
        }
       
        if((streng[a]==' '||'\0')&&(ord[i]=='\0'))
        {
            return true;
        }

    }
    }
    return false;
}


håber detteher kan give en god ide om hvordan funktionen skal opføre sig

find_word("hej", "k hej j")=true
find_word("hej", "k dhej j")=false
find_word("hej", " hej ")=true

(vil blive gladest hvis i kan rette i det ovenstående så jeg kan se hvad jeg har gjort galt)


ZyXTeM
Avatar billede segmose Nybegynder
21. juli 2003 - 14:21 #1
for(count; streng[count]!= 0 /*NULL er en pointer*/; count++) {
     
if(((streng[count]==' ')&&(streng[++count]==ord[0]))||(streng[count]==ord[0])) {
                                  ^^ farlig side effect, betyder at i || delen er count måske eller måske ikke opdateret, brug evt. count+1 og opdater bagefter.

brug evt. strstr til at finde ordet og så check at der er space før eller første bogstav af ordet er første tegn i streng.
Avatar billede driis Nybegynder
21. juli 2003 - 14:22 #2
Funktionen du ønsker findes faktisk i form af funktionen strstr, som du kan benytte ved at inkludere string.h i dit projekt. For at lave nøjagtig den funktion, du har beskrevet ovenfor, kunne du f.eks. gøre sådan (både funktion 'find_word' og testprogram til denne er medtaget i nedenstående eksempel) :

#include <iostream>
#include <string.h>

using namespace std ;

bool find_word(char * ord,char * tekst)
{
    if ( strstr(tekst,ord) )
        return true ;
    else
        return false ;
}
   
int main()
{
    char tekst[] = "The quick brown fox jumped over the lazy dog" ;
    cout << find_word("quick", tekst) ;
        return 0 ;
}
Avatar billede segmose Nybegynder
21. juli 2003 - 14:29 #3
driis > find_word("hej", "k dhej j")=false går galt.

der skal et extra check på

char *res;
res = strstr(tekst, ord);
if (res &&  /* found a string */
  ((res == tekst) || *(res-1) = ' ')) /* and it is either at the start or has space in front. */
  return true;
return false;
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