Archief - C++ check string

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

mattias112

Legacy Member
hey,

ik wil een string checken of hij enkel letters bevat, en geen cijfers of speciale characters.

iemand die kan helpen?
mattias

Curahee Q

Legacy Member
Met reguliere expressies kan dit heel gemakkelijk. Denk dat regex'en wel iets properder zijn. Al lijkt het op het eerste zicht niet standaard in C++ te zitten, in java is het wel heel gemakkelijk maar daar ben je nu niks mee ;).

Cycloon

Legacy Member
Het zal wel propere code geven, maar nooit zo efficiënt zijn als een simpel luske die een interval controleert. In C++ zit overigens nauwelijks iets van code standaard ingebakken :)

Tyfius

Legacy Member
Cycloon zei:
Het zal wel propere code geven, maar nooit zo efficiënt zijn als een simpel luske die een interval controleert. In C++ zit overigens nauwelijks iets van code standaard ingebakken :)
Het hangt van uw regex af, maar dat kan efficiënter zijn dan uw lus die 200 verschillende karakters moet checken. Die halve nanoseconde gaat het volgens mij ook niet echt maken.

Ik kan ten zeerste de Boost C++ Libraries aanbevelen. Die bevatten een hele hoop extra functionaliteit waarvan delen naar alle waarschijnlijkheid in de volgende versie van C++ zullen worden opgenomen. Zij beschikken ook over een Boost.Regex librarie die alles doet wat je moet doen.

Daarnaast, al klinkt het zelf verkeerd dat ik dit zeg :p, kan je met Visual C++, onder Windows althans, ook aan de regex (en andere onderdelen) van het .NET framework.

blackrabbit

Legacy Member
Er bestaan ongetwijfeld regex-libraries voor C++.

Maar wet je zegt over efficiëntie moet toch even bijgeschaafd worden: voor elke letter hoeven er 'maar' 2 tests gedaan worden (en als je het wat slim plant in de meeste gevallen slechts 1): kijken of de ascii waarde van dat karakter tussen 65 en 90 ligt. (heb de indruk dat jij voor elke letter zou gaan testen of het gelijk is aan 'a', zoniet aan 'b', zoniet aan 'c', ...). (*)

Een regex gaat ook sowieso alle karakters gaan checken he. Je moet sowieso elk karakter eens laten passeren.

(*) bij nader inzien: is denk ik toch niet wat je bedoelt :) Maar rest van uitleg is nog steeds valid

Cycloon

Legacy Member
Een regex kan in dit geval idd nooit sneller zijn. Alleen al de regex evalueren kost al heel wat extra moeite. Kijk maar bv naar ipb, die hebben al hun regex weggehaald om quotes/code/img tags te vinden omdat het gewoon niet snel genoeg was. Regex is iets mooi maar voor een simpel geval als dit is het wel duidelijk overkill.

Tyfius

Legacy Member
Voor 1 of 2 karakters is dat inderdaad nutteloos om een regex te gaan gebruiken. Alhoewel ik daarvan eigenlijk de performance niet weet. Maar als je op zoek gaat naar woorden in een string dan denk ik dat de performance van een goede regex library beter is dan wat de gemiddelde programmeur ongeoptimalizeerd gaat schrijven.

Op die boos regex pagina staat trouwens ook een performance sectie waar toch handige resultaten bij zitten.

Gurdt

Legacy Member
een reguliere expressie is uiteraard enkel nuttig als de te matchen woorden vn dezelfde VORM moeten zijn.
een regexp maakt een soort zoekboom aan die alle woorden accepteert die de regexp uitdrukt. Als je dan slechts 4 woorden gaat gebruiken is die zoekboom redelijk nutteloos...

niet gebruiken: om te checken of er bepaalde letters wel of niet in voorkomen
wel gebruiken: om te checken of iets bv een email-adres is (dus volgorde is vn belang enz)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan