Most recent comments
Jogging og blogging
Are, 9 måneder, 2 uker
Liveblogg nyttårsaften 2016
Are, 9 måneder, 2 uker
Reading in dark times
Are, 11 måneder, 1 uke
Moldejazz 2016
Camilla, 1 år, 2 måneder
Dørskilt
Karoline, 1 år, 3 måneder
Halifax
Tor, 1 år, 4 måneder
Sony Smartwatch 3 review
Tor, 1 år, 4 måneder
Numerikk, takk
Tor, 1 år, 4 måneder
Topp tur
Camilla, 1 år, 6 måneder
Tolkien reading day
Tor, 1 år, 7 måneder
50 book challenge
Camilla, 9 måneder, 3 uker
Five years ago
Tokyo
Tor
Controls
Register

Den tomme strengen

Her en dag hadde jeg behov for å bytte ut et par tegn i en tekststreng, og siden dette ikke akkurat er en innebygget funksjon i fortran bestemte jeg meg for å skrive min egen. Men først, hva betyr det egentlig å bytte ut et par tegn i en tekststreng?

En tekststreng, eller en string som man sier på engelsk, er rett og slett en serie med tegn som man kan håndtere i et programmeringsspråk. Jeg holder egentlig på å skrive en artikkel om datatyper, og da kommer jeg litt tilbake til dette, men for øyeblikket kan vi tenke på det som bokstaver, tall og andre tegn, pakket i hermetegn. For eksempel:
a = 'elefant'

er python-kode for å si at a er en variabel som inneholder teksten «elefant». Det jeg vil gjøre er å erstatte en substreng i denne strengen med en annen streng. Hvis jeg for eksempel erstatter 'e' med 'o' blir resultatet 'olofant'.

(Egentlig kunne jeg tenke meg å være veldig generell, så jeg skrev en funksjon som erstatter alle instanser av én substreng med en annen streng av vilkårlig lengde, men på grunn av mangelfull implementering av Fortran 2003 i GCC 4.7 (den støtter ikke variabler i allocate-statements for allokering av strenger, som så vidt jeg kan skjønne koker ned til at du må vite lengden på strengen når du kompilerer.) så jeg meg nødt til å begrense meg til å erstatte en substreng med en annen streng av samme lengde, slik at lengden på strengen du erstatter i blir uendret.)

Etter å ha programmert dette begynte jeg naturligvis å teste koden, og etter å ha luket ut de naturlige feilene (mangelfull håndtering av mellomrom, uendelig løkke hvis du erstatter en substreng med en streng som inneholder substrengen selv, etc.) begynte jeg å klø meg i hodet for å komme på noen enda særere spesialtilfeller å teste. Det falt meg inn at man kunne se for seg å prøve å erstatte den tomme strengen med noe, som i pseudokode for eksempel kan se omtrent slik ut:
erstatt alle tilfeller av '' i 'elefant' med ' '

Jeg heller mot at svaret her skal være uendelig mange mellomrom (eventuelt en feilmelding, hvis man foretrekker et pysete programeringsspråk), siden det er plass til uendelig mange tomme strenger i en hvilkensomhelst annen streng (sagt på en mer tungvindt måte, den tomme strengen er identitetselementet i konkatenering).

Jeg sjekket hva python gjør, og ble egentlig litt overrasket over å se at
'elefant'.replace('', ' ')

gir
' e l e f a n t '

Hvem bestemte at det finnes nøyaktig én tom streng mellom hvert tegn og på endene i en ikke-tom streng? Virker litt sært, spør du meg, så jeg gikk for å ikke endre strengen hvis man ber om å erstatte den tomme strengen med noe. Det er kanskje ikke optimalt det heller, siden man kunne tenke seg å gjøre noe slikt som
erstatt alle tilfeller av '' i '' med 'elefant'

og forvente å få 'elefant', og det finnes jo noe som heter The principle of least surprise, som sier at man bør gjøre det brukeren mest sannsynlig forventer, men jeg holder likevel en knapp på min løsning.

Såh. Jeg husker ikke helt hva jeg ville med denne artikkelen, men den kan kanskje fungere som en illustrasjon på en liten del av hverdagen til en numerisk fysiker.
Camilla, Are likes this

Comments

Camilla,  05.04.13 19:45

Jeg skjønte ingenting den første gangen jeg leste dette. Men nå skjønner jeg litt. Det må jo være bra.

Are,  05.04.13 22:04

Artig. Men det må da finnes hundrevis av implementasjoner av dette på nettet, som du kunne kopiert? Ikke for det, er mer lærerikt å prøve sjøl (først).
Tor,  06.04.13 10:07

Jeg puslet også litt med lenkede lister, etter at jeg oppdaget at det finnes pekere i fortran. Jeg angrer egentlig litt på at jeg aldri tok noe kurs i algoritmer og datastrukturer. Det vil si, jeg tok det aldri på universitetet. Jeg fulgte jo sånn halvveis et onlinekurs om disse tingene i høst (som nevnt her), og jeg planlegger å følge oppfølgeren nå i vår: Algorithms, Part II.
Are likes this