Rozdział 8


ŁAŃCUCHY

 

Podsumowanie

Slicing, używanie TO. Zauważ, że ta notacja nie należy do standardowego BASIC'a.

 

Mając dany łańcuch, jego podłańcuch składa się z pewnego ciągu kolejnych znaków zawartych w nim. Stąd "tekst" jest podłańcuchem "wielki tekst", lecz "w tekst" i "wielki reg" nie są.

Istnieje notacja zwana slicing (segmentowanie) do opisu podłańcuchów i można ją zastosować do dowolnych wyrażeń łańcuchowych. Ogólna postać wygląda następująco:

 

wyrażenie łańcuchowe (start TO koniec)

 

zatem przykładowo

 

"abcdef"(2 TO 5)="bcde"

 

Jeśli pominiesz start, to zostanie w to miejsce przyjęta wartość 1; jeśli pominiesz koniec, to komputer zastosuje wartość równą długości łańcucha. Stąd

 

"abcdef"( TO 5)="abcdef"(1 TO 5)="abcde"
"abcdef"(2 TO )="abcdef"(2 TO 6)="bcdef"
"abcdef"( TO )="abcdef"(1 TO 6)="abcdef"

 

(Ostatni przykład możesz również wpisać jako "abcdef"(), jednak jaką ma to wartość?)

Nieco inna postać opuszcza TO i pozostawia jedynie samą liczbę.

 

"abcdef"(3)="abcdef"(3 TO 3)="c"

 

Chociaż zwykle zarówno start jak i koniec muszą odwoływać się do istniejących fragmentów łańcucha, to reguła ta jest unieważniana przez inną: jeśli start jest większy od koniec, to wynikiem będzie pusty łańcuch. Zatem

 

"abcdef"(5 TO 7)

 

daje błąd 3 subscript wrong (3 zły indeks), ponieważ łańcuch zawiera jedynie 6 znaków a 7 to już zbyt wiele, lecz

 

"abcdef"(8 TO 7)=""

 

i

 

"abcdef"(1 TO 0)=""

 

Początek i koniec nie powinny być ujemne, inaczej otrzymasz błąd B integer out of range (B liczba całkowita poza zakresem).

Poniższy program w prosty sposób ilustruje niektóre z tych reguł.

 

10 LET a$="abcdef"
20 FOR n=1 TO 6
30 PRINT a$(n TO 6)
40 NEXT n
50 STOP

 

Gdy uruchomisz ten program, wpisz NEW i wprowadź kolejny:

 

10 LET a$="TEREFEREKUKU"
20 FOR n=1 TO 12
30 PRINT a$(n TO ),a$((13-n) TO )
40 NEXT n
50 STOP

 

Przy zmiennych łańcuchowych możemy nie tylko wydobywać z nich podłańcuchy, lecz również przypisywać tym łańcuchom nowe zawartości.

Na przykład, wpisz

 

LET a$="Jestem ten ZX Spectrum"

 

a następnie

 

LET a$(8 TO 11)="xxxxxx"

 

i

 

PRINT a$

 

Zwróć uwagę, że ponieważ podłańcuch a$(5 TO 8) ma długość tylko 4 znaków, to jedynie pierwsze 4 litery x zostały użyte w przypisaniu. Jest to cecha charakterystyczna przypisywania do łańcuchów: podłańcuch musi posiadać taką samą długość po zakończeniu operacji, jaką miał na jej początku. Aby upewnić się, że tak właśnie się stanie, przypisywany łańcuch jest przycinany z prawej strony, jeśli jest zbyt długi, lub wypełniany spacjami, jeśli jest zbyt krótki — nazywa się to przypisaniem Prokrusta (ang. Procrustean assignment). Nazwa ta pochodzi od nazwiska syna Posejdona, Prokrusta, który przebrany w skórę wilka czyhał na podróżnych na drodze Megary do Aten. Każdego złapanego nieszczęśnika kładł na swoim łożu i mierzył — jeśli był za długi, to go przycinał, jeśli był za krótki, to go naciągał. Kres temu procederowi położył grecki heros Tezeusz.

Jeśli teraz spróbujesz

 

LET a$()="Co tam"

 

i

 

PRINT a$;"."

 

to zobaczysz, że ta sama rzecz wystąpiła ponownie (tym razem ze wstawieniem spacji), ponieważ a$() liczy się jako podłańcuch.

 

LET a$="Co tam"

 

wykona zadanie poprawnie.

Skomplikowane wyrażenia łańcuchowe będą potrzebowały nawiasów wokół siebie, zanim zostaną poddane slicingowi. Na przykład

 

"abc"+"def"(1 TO 2)="abcde"
("abc"+"def)(1 TO 2)="ab"

 

Ćwiczenie

  1. Postaraj się napisać program wypisujący dzień tygodnia z użyciem slicingu. Podpowiedź, niech łańcuch ma zawartość NiePonWtoSroCzwPiaSob.

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe