Avatar billede shj Nybegynder
25. oktober 1999 - 16:12 Der er 13 kommentarer og
1 løsning

finde forekomsten af en tekst i en fil

hej! 
jeg sidder og nørkler lidt med en lille opgave hvor jeg skal finde forekomsten af en tekststreng i en almindelig tekst fil. jeg har følgende ide
void find(char file[], char soegstring[])
char forkomst[63];
fstream filtxt(file,ios::in);
while(!filtxt.eof())
filtxt>>forkomst;
  if(strcmp(forkomst,soegstring)==0)
    cout <<"ord "<<soegstring<<"        fundet"<<endl;
}

problemmet er at char[64] jo er erklæret i memory og indeholder alle 64 tegn, men soegstring kun indeholder det antal tegn som teksten fylder.
håber nogen har en ide
Avatar billede bjarke Nybegynder
25. oktober 1999 - 17:12 #1
Ork ja - hvis altså jeg har forstået dig ret

1) Lav din egen sammenlignings-funktion
2) Brug strstr()
3) Afkort forkomst til samme længde som soegstring

Det var da i hvert fald de første 3 idéer. Hvilken der er den bedste afhænger også lidt af hvad du præcis skal. Skriv hvis dette ikke rækker.
Avatar billede bjarke Nybegynder
26. oktober 1999 - 07:56 #2
Hvad mener du med de 64 tegn? I "filtxt >> forkomst" bliver strengen jo nultermineret!

Skal forkomst bare starte med strengen soegstreng?
Avatar billede shj Nybegynder
26. oktober 1999 - 11:30 #3
Ja det er i hvert fald noget i den retning. Hvis jeg bruger den termonologi jeg har beskrevet i spørgsmålet, kan jeg ikke samligne strengende pågrund af at char varablen forkomst jo indeholder en masse \n \0 da den er fordefineret til 64. Når jeg debugger koden kan jeg så se at den ikke f.eks kan samlignes med strengen "viggo\0" forde forkomst indeholder en masse andet også?
forstår hvad jeg mener?
Avatar billede bjarke Nybegynder
26. oktober 1999 - 11:38 #4
Måske, men jeg tror ikke, at du helt har ret.

Prøv dette:

void find(char* file, char* soegstring)
{
  char forkomst[63];
  int MAX = strlen(soegstring);

  fstream filtxt(file,ios::in);
  while(!filtxt.eof())
  {
    filtxt>>forkomst;
    forkomst[MAX] = ´\0´;
    if(strcmp(forkomst,soegstring)==0)
      cout << "ord " << soegstring << "fundet" << endl;
  }
}

Avatar billede shj Nybegynder
26. oktober 1999 - 11:54 #5
Det virkede, jeg havde sådan set også tænkt på at jeg kunne brugge pointere i functions parametrene, men opgaven ligger op til at jeg skal løse opg.
med følgende function.
int find(char file[], char soegstring[])
den skal bare retunere 1 hvis ordet findes. Men hvad. Tak for hjælpen Bjarke, hmmm er du interesseret i en lille c++ opgave jeg har fået i forbindelse med eksamensforeberedelse. Det er såen en hvor man skal gennemskue hvad der er forkert.

Simon
Avatar billede bjarke Nybegynder
26. oktober 1999 - 12:18 #6
Du skrev selv void, men du gør da bare sådan (char* file=char file[]):

int find(char file[], char soegstring[])
{
  char forkomst[63];
  int MAX = strlen(soegstring);

  fstream filtxt(file,ios::in);
  while(!filtxt.eof())
  {
    filtxt>>forkomst;
    forkomst[MAX] = ´\0´;
    if(strcmp(forkomst,soegstring)==0)
      return 1;
  }
  return 0;
}

Tja, det kunne da være meget sjovt at se:-)
Avatar billede shj Nybegynder
26. oktober 1999 - 12:59 #7
Tak for hjælpen :-)

du får lige et nyt spørgsmål!
Avatar billede soepro Nybegynder
26. oktober 1999 - 13:29 #8
simon >> Denne opgave er jo helt analog til den du stillede omkring erstaning af een streng i en fil med en anden - som også blev besvaret her på eksperten. Nemme point til bjarke !
Avatar billede bjarke Nybegynder
26. oktober 1999 - 16:21 #9
soepro >> Det har du ret i. Jeg har også undret mig lidt over, at der er kommet så mange ens spørgsmål (men jeg klager ikke over pointene ;-)

simon >> Hvordan kunne det være, at du ikke kunne finde ud af det her selv, efter din store 300 points opgave?

I øvrigt var det vist ikke helt rigtigt det jeg skrev:
  char* file = char file[]
Det er vist:
  const char* file = char file[]
Pointeren er en variabel, men den anden erklæring erklærer en konstant streng. Ikke soepro?
Avatar billede shj Nybegynder
26. oktober 1999 - 17:07 #10
hmmmmmmm ja hvad skal jeg ligesom sige til det! jeg må jo bare prøve lidt bedre selv at løse opgaverne i fremtiden, men får mig er det også vigtigt at få forskellige vinkler på tingende.
Men i har da fuldstændig ret i at jeg måske kunne finde nogle svar på de spørgsmål der allerede er besvaret her på Eksperten.
Avatar billede bjarke Nybegynder
26. oktober 1999 - 17:40 #11
Jo, det er skam rigtigt, at det ofte kan være inspirerende at høre hvordan andre vil løse et problem, men lige i dette tilfælde synes jeg, at det måske var lidt underligt med så let et spørgsmål lige efter det langt vanskelligere til 300 points :-)
Avatar billede shj Nybegynder
26. oktober 1999 - 17:44 #12
ja det synes jeg egenligt også du
Avatar billede shj Nybegynder
26. oktober 1999 - 17:51 #13
prøver lige igen.:-) Måske har det noget med min tålmodighed at gøre, jeg sad og arbejde med opgaven og så ville det bare ikke virke. Også tænkte jeg at nogle måske ville score nogle billige point.  De simple opgaver er et led i forberedelsen til eksamen og derfor ville jeg jo på en måde også gerne repetere lidt. Jeg har nu gennmegået alle opgaverne med din og soepro´s hjælp, det har virkligt givet mig en del. Og jeg er virklig glad for de svar i har givet mig. Når man som mig er temmelig ny i c++ glemmer man "synes jeg" hurtigt de simple ting, mens de lidt mere tunge ting som constructor overloading klasse nedarvning faktisk hænger bedre fast, underligt nok, men måske min lile hjerne bare ikke kan kapere det :-) 

Hilsen Simon.
Avatar billede bjarke Nybegynder
26. oktober 1999 - 20:01 #14
:-)

God fornøjelse med eksamensforberedelserne og eksamen....

Det er i øvrigt heller ikke så tosset for mig at få repeteret tingene. Jeg har selv lige haft dit pensum i foråret (det lader til at vore pensa (?) må være ret identiske).
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