🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: nl.comp.programmeren
Article #653

Re: c++ isin code

#653
From: Duco Fijma
Date: Thu, 10 May 2001 20:41
90 lines
3504 bytes
> #include <stdio.h>
> #include <string.h>
>
>
> int isin(char *string1,char *string2) /* if (string1 isin string2) return
1
> else return 0 */

Waarom programmeer je "isin" eigenlijk uit? Wat is het (bedoelde) verschil
tussen "isin" en de standaard-functie "strstr"?

De artistieke impressie is dat "isin" 1 oplevert als het eerste woord van
string1 in string2 voorkomt. Of zie ik het verkeerd?

> {
>  char *word1;
>  word1 = strtok (string1, " "); // returns a char *
>  string2 = strstr (string2,word1); // returns a char *  ///

Vaststelling: "string2" kan nu van alles zijn (inclusief NULL).

>  if (string1 == '\0')

string1 is van het type "char *". '\0' is van het type "char". Da's dus niet
goed. Probeer je te testen of string1 de lege string is? Gebruik dan
"*strings1 == '\0'".
(Mag natuurlijk alleen als je zeker weet dat string1 != NULL)

>  {
>   /*it isn't in it */
>   return 0;
>  }
>  if(strncmp (string1, string2, strlen(string1)) == 0)

Huuu! string2 kan op dit punt ook gelijk aan NULL zijn. Zou de oorzaak van
een core-dump kunnen zijn...

>  {
>   /*its in it*/
>   return 1;
>  }
>  else
>  {
>   /*its not in it */
>   return 0;
>  }
> }
>
>
>
> int main()
> {
>    char *a="test test";
>    char *b="lala test tetsttt123";
>  if (isin(&a,&b) == 1) // werkt in C niet in CPP en moet CPP zijn dus :(

Alweer een fout in de typering. "&a" en "&b" zijn van het type "char**". De
functie isin
verwacht "char*". Met andere woorden: haal die "&" weg.

>  {
>   printf("it works");
>  }
>  else
>  {
>   printf("it doesn't work");
>  }
>  return 0;
> }
> ---------------- einde code -------------
>
> alle hulp is welkom
> alvast bedankt :)

Ik zou zeggen: probeer eerst een scherp te krijgen wat je nu eigenlijk wil
berekenen (vergeet de gevallen string1 == NULL en/of string2 == NULL daarbij
niet). Dan netjes uitprogrammeren:
1) Zorg dat de types kloppen. Je lijkt nog wat moeilijkheden te hebben met
pointers. Lees
K&R (of je favoriete leesboek) er nog eens op na. Eigenlijk is het heel
simpel. Als je een parameter hebt van het type "T*" en je hebt een argument
van hetzelfde type, dan heb je geen "&" nodig.
2) Zorg dat je rekening houdt met ALLE mogelijke resultaten van functies die
je aanroept (zoals het geval dat "strstr" NULL oplevert.
3) Als het nog niet lukt, post hier weer een volgende versie.

Succes!

Duco
Technical Details
Message-ID: <9deubm$jfo$1@news1.xs4all.nl>
Path: arc1-ca.pugleaf.net!newsfeed.google.com!sn-xit-03!supernews.com!nntp.cs.ubc.ca!skynet.be!newsfeeds.belnet.be!news.belnet.be!transit.news.xs4all.nl!not-for-mail
References: <GsAK6.67067$ii.8636438@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: 107324,6e75983a23de8f69
X-Google-Attributes: gid107324,public
X-Google-Thread: fcea4,6e75983a23de8f69
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-05-10 13:48:02 PST
Path: arc1-ca.pugleaf.net!newsfeed.google.com!sn-xit-03!supernews.com!nntp.cs.ubc.ca!skynet.be!newsfeeds.belnet.be!news.belnet.be!transit.news.xs4all.nl!not-for-mail
From: "Duco Fijma" <duco@lorentz.xs4all.nl>
Newsgroups: nl.comp.programmeren,be.comp.programming
Subject: Re: c++ isin code
Date: Thu, 10 May 2001 22:41:28 +0200
Organization: XS4ALL Internet BV
Lines: 94
Message-ID: <9deubm$jfo$1@news1.xs4all.nl>
References: <GsAK6.67067$ii.8636438@afrodite.telenet-ops.be>
NNTP-Posting-Host: lorentz.xs4all.nl
X-Trace: news1.xs4all.nl 989527222 19960 194.109.62.122 (10 May 2001 20:40:22 GMT)
X-Complaints-To: abuse@xs4all.nl
NNTP-Posting-Date: 10 May 2001 20:40:22 GMT
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2314.1300
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300