Article View: be.comp.programming
Article #2338Re: Probleem met strings in C++
From: Arnold Hendriks
Date: Mon, 21 Jun 2004 17:59
Date: Mon, 21 Jun 2004 17:59
59 lines
3547 bytes
3547 bytes
"Skender" <Skender@GeenSpamAUB.VrijZijn.be> wrote in message
news:NhDBc.162226$LL2.8273027@phobos.telenet-ops.be...
> > naam was aangemaakt via new char[], en moet dus wel via delete[]
> > verwijderd worden.
>
> Wanneer moet ik eigenlijk een string deleten?
Je moet niets. Je mag hem deleten zodra je hem niet meer nodig hebt.
> In deze functie bijvoorbeeld
> worden twee strings aangemaakt, maar ik kan ze niet deleten, want ik heb
er
> geen pointer naar.
>
> bool Gemeente::naamBevat(char* gezocht){
> return strstr(getNaamKlein(),strlwr(gezocht)) != 0;
> }
>
> Moet ik dat dan vervangen door dit?
>
> bool Gemeente::naamBevat(char* gezocht){
> char* naamKlein = getNaamKlein();
> char* gezochtKlein = strlwr(gezocht);
> bool res = strstr(naamKlein,gezochtKlein) != 0;
> delete [] naamKlein;
Alleen als getNaamKlein() een new[] heeft uitgevoerd
> delete [] gezochtKlein;
strlwr() is geen standaard C++ functie. De eerste strlwr die ik op google
zie geeft dezelfde waarde terug als die je erin stopt, maw: hij verandert de
string die je doorgaf aan de functie. Als dat ook jouw strlwr() is, dan heb
je bij deze niet alleen 'gezochtKlein' verwijderd maar ook 'gezocht'. Ik
denk niet dat dat je bedoeling was, want een tweede aanroep van naamBevat
voor een ander object, maar met dezelfde string pointer, zou dan crashen.
In dat geval had de compiler trouwens de fout zelf ook opgespoord als je hem
had aangegeven dat het niet je bedoeling was 'gezocht' zelf te wijzigen
(zoals waarschijnlijk je intentie was:)
bool Gemeente::naamBevat(char const * gezocht)
Je zou het ook met std::string kunnen oplossen, op voorwaarde dat
getNaamKlein ook een std::string teruggeeft:
using namespace std;
bool Gemeente::naamBevat(string const &gezocht){
string naamKlein = getNaamKlein();
string gezochtKlein = gezocht;
transform(gezochtKlein.begin(), gezochtKlein.eind(), gezochtKlein.begin(),
tolower);
return naamKlein.find(gezochtKlein) != string::npos;
}
Dan ben je helemaal van de deletes af. string regelt dat allemaal zelf.
Nadeel is dat de code enigszins onnatuurlijk kan overkomen, als je nog niet
echt gewend bent aan de C++ uitbreidingen op de C libraries.
Technical Details
Message-ID:
<cb77m4$1sq$1@netlx020.civ.utwente.nl>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!news-out2.kabelfoon.nl!83.128.0.10.MISMATCH!newsfeed.kabelfoon.nl!surfnet.nl!news.utwente.nl!not-for-mailReferences:
<6jKAc.159880$da2.8238210@phobos.telenet-ops.be> <epXAc.160351$_b2.8245342@phobos.telenet-ops.be> <FNXAc.160366$TL1.8208446@phobos.telenet-ops.be> <GXlBc.161622$ar1.8168567@phobos.telenet-ops.be> <XouBc.161867$UL1.8209503@phobos.telenet-ops.be> <cb646h$jhk$1@netlx020.civ.utwente.nl> <NhDBc.162226$LL2.8273027@phobos.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,f17987ac718646c6 X-Google-Attributes: gidfcea4,public Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!news-out2.kabelfoon.nl!83.128.0.10.MISMATCH!newsfeed.kabelfoon.nl!surfnet.nl!news.utwente.nl!not-for-mail From: "Arnold Hendriks" <a.hendriks@b-lex.nl> Newsgroups: be.comp.programming Subject: Re: Probleem met strings in C++ Date: Mon, 21 Jun 2004 19:59:32 +0200 Organization: University of Twente, Enschede, The Netherlands Lines: 61 Message-ID: <cb77m4$1sq$1@netlx020.civ.utwente.nl> References: <6jKAc.159880$da2.8238210@phobos.telenet-ops.be> <epXAc.160351$_b2.8245342@phobos.telenet-ops.be> <FNXAc.160366$TL1.8208446@phobos.telenet-ops.be> <GXlBc.161622$ar1.8168567@phobos.telenet-ops.be> <XouBc.161867$UL1.8209503@phobos.telenet-ops.be> <cb646h$jhk$1@netlx020.civ.utwente.nl> <NhDBc.162226$LL2.8273027@phobos.telenet-ops.be> NNTP-Posting-Host: jeltsin.student.utwente.nl X-Trace: netlx020.civ.utwente.nl 1087840772 1946 130.89.163.169 (21 Jun 2004 17:59:32 GMT) X-Complaints-To: abuse@utwente.nl NNTP-Posting-Date: Mon, 21 Jun 2004 17:59:32 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1409 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1409