Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Łańcuch znaków

Łańcuch znaków to ciąg znaków o ustalonej wcześniej lub dowolnej długości, w którym znaki to kolejno zapisane bajtybajtbajty w pamięci.

Przykłady łańcuchów znaków:

  • „Krokodyl”,

  • „Informatyka jest super”,

  • „1234453ABC”,

  • „#*%$ ./#”.

Tablica ASCII

Przyjrzyjmy się tabeli ASCII dla zakresu wartości od 32 do 127.

Wartość

Symbol

Wartość

Symbol

Wartość

Symbol

32

Spacja

64

@

96

`

33

!

65

A

97

a

34

66

B

98

b

35

#

67

C

99

c

36

$

68

D

100

d

37

%

69

E

101

e

38

&

70

F

102

f

39

'

71

G

103

g

40

(

72

H

104

h

41

)

73

I

105

i

42

*

74

J

106

j

43

+

75

K

107

k

44

,

76

L

108

l

45

-

77

M

109

m

46

.

78

N

110

n

47

/

79

O

111

o

48

0

80

P

112

p

49

1

81

Q

113

q

50

2

82

R

114

r

51

3

83

S

115

s

52

4

84

T

116

t

53

5

85

U

117

u

54

6

86

V

118

v

55

7

87

W

119

w

56

8

88

X

120

x

57

9

89

Y

121

y

58

:

90

Z

122

z

59

;

91

[

123

{

60

<

92

\

124

|

61

=

93

]

125

}

62

>

94

^

126

~

63

?

95

_

127

Delete

Wartości z zakresu 0‑31 to w większości (ale nie wszystkie) klawisze kontrolne – Esc, tabulator, Backspace itd. Natomiast zakres wartości 128‑255 obejmuje znaki charakterystyczne dla danego języka – w języku polskim są to m.in. „ł”, „ć”, „ą”, „ż”.

Ciekawostka

Przeznaczenie pierwszych 32 kodów (0‑31) ASCII znakom sterującym funkcjonuje już od czasów, gdy komputery były jedynie terminalami („odbiornikami” treści z serwera). Wówczas opisywane kody umożliwiały sterowanie urządzeniem (terminalem), np. służyły do manipulowania ekranem lub papierem w drukarce.

Kody ASCII w systemie binarnym reprezentowane są na 8 bitach, np. literze „H” odpowiadać będzie kod  „0100 1000”. Analogicznie cyfry w kodzie ASCII mają konkretną reprezentację binarną, odmienną niż w przypadku rozpatrywania ich jako zmiennych liczbowych.

Przykład 1

Cyfrę 9 możemy zaprezentować w systemie binarnym jako 1001, natomiast wartość 9 w kodzie ASCII (binarnie 0000 1001) przypisana jest tabulatorowi. Znakowi „9” odpowiada inna wartość – 57 (binarnie 0011 1001). Możemy więc zauważyć, że reprezentacje binarne cyfry 9 i kodu ASCII dla znaku „9” będą się od siebie różnić.

Rzutowanie zmiennych

Rzutowanie zmiennych znane jest także pod pojęciem konwersja typu. Jest to zmiana typu zmiennej. Czynność ta jest bardzo często wykorzystywana podczas programowania.

Załóżmy, że mamy zmienną typu znakowego.

Linia 1. zmienna znak równości apostrof C apostrof.

zmienna przechowujemy znak 'C'. Zastanów się, co zostanie wyświetlone, po wykonaniu następującej operacji:

Linia 1. zmienna znak równości apostrof C apostrof. Linia 3. wyświetl otwórz nawias okrągły rzutujCalk otwórz nawias okrągły zmienna zamknij nawias okrągły zamknij nawias okrągły.
Ważne!
  • funkcja rzutujCalk() wykonuje poprawne rzutowanie do typu liczbowego całkowitego,

  • funkcja wyświetl() powoduje wyświetlenie parametruparametrparametru.

Zostanie wyświetlona liczba 67, która jest odpowiednikiem dziesiętnym znaku 'C' w tablicy ASCII.

Praca domowa

Zastanów się, co zostanie wyświetlone, jeżeli wykonamy przedstawiony za pomocą pseudokodu algorytm. Poznaj definicje metod:

  • rzutujCalk() wykonuje poprawne rzutowanie do typu liczbowego całkowitego,

  • bin() konwertuje liczbę typu liczbowego całkowitego na liczbę zapisaną binarnie,

  • wyświetl() powoduje wyświetlenie parametru.

Linia 1. zmienna znak równości apostrof kratka apostrof. Linia 3. wyświetl otwórz nawias okrągły bin otwórz nawias okrągły rzutujCalk otwórz nawias okrągły zmienna zamknij nawias okrągły zamknij nawias okrągły zamknij nawias okrągły.

Wskazówka: tablica ASCII.

Ważne!

Opisane powyżej rzutowanie odnosi się do języków programowania obsługujących zmienne typu char, np. języka C++. Podobny efekt w języku Python otrzymać można, wykorzystując funkcję ord(). Jej działanie nie jest jednak rzutowaniem, a zwracaniem kodu ASCII dla danego symbolu.

Funkcje i operacje

Omówimy teraz typowe funkcje w językach programowania, które realizują różne rodzaje operacji na łańcuchach znaków.

Funkcja length

Funkcja length jest jedną z najczęściej wykorzystywanych funkcji przy operacjach na łańcuchach znaków. Służy ona do określania długości ciągu znaków wyrażanej w liczbie znaków.

Przykład 2

Funkcja length dla łańcucha znaków „INFORMATYKA” zwróci wartość liczbową 11.

Konkatenacja

„Sklejanie” ciągów znaków. Konkatenacja powoduje łączenie ze sobą łańcuchów znaków.

Przykład 3

Po konkatenacji łańcuchów znaków „Ala”, „ma”, „kota” powstanie łańcuch znaków „Alamakota”. Jeżeli chcielibyśmy otrzymać tekst „Ala ma kota”, wówczas należałoby dokonać konkatencji również dodatkowych dwóch znaków spacji
„ „ umieszczonych pomiędzy ciągami „Ala” i „ma” oraz „ma” i „kota”.

Ciekawostka

W przypadku języków programowania C++, Java, Python do łączenia łańcuchów znaków używa się znaku dodawania +.

Funkcja insert

Funkcja umożliwiająca wstawianie znaków i ciągów znaków w określonym miejscu. Zazwyczaj przyjmuje dwa parametry: ciąg znaków do wstawienia oraz miejsce (indeks), w którym łańcuch znaków ma zostać wstawiony.

Funkcja erase

Funkcja usuwająca podaną część z łańcucha znaków. Występuje najczęściej w dwóch postaciach:

  1. Przyjmuje tylko jeden parametr – jest to indeks znaku, który ma zostać usunięty z łańcucha znaków.

  2. Przyjmuje dwa parametry, dwa indeksy, z czego pierwszy to początek wycinanego fragmentu a drugi koniec.

Funkcja replace

Funkcja replace najczęściej występuje w poniższych postaciach:

  1. Przyjmuje dwa parametry, którym są znaki. Funkcja zamienia wszystkie występowania znaku podanego jako pierwszy parametr na znak podany jako drugi parametr.

  2. Przyjmuje dwa parametry, którymi są łańcuchy znaków. Pierwszy parametr to łańcuch znaków, który chcemy zamienić, a drugi to łańcuch znaków, na jaki chcemy zamienić.

Funkcja find

Służy do wyszukiwania wzorca w łańcuchu znaków. Zazwyczaj funkcja zwraca pozycję (indeks) wystąpienia wzorca w łańcuchu znaków. Innym wariantem może być funkcja find, która jest typu logicznego i zwraca prawdę, jeżeli wzorzec wystąpił w sprawdzanym łańcuchu znaków, jeśli nie – zwraca fałsz.

Funkcja substr

Funkcja wyszukująca w ciągu znaków podciąg o podanej długości znajdujący się w ustalonej lokalizacji, a następnie go zwracająca. Jako parametry opisywana funkcja przyjmuje ciąg znaków, pozycję znaku w ciągu, od której zaczyna się podciąg oraz liczbę znaków zawartych w podciągu.

Przykład 4

Wyszukiwanie podciągu w słowie „NAUKA”:

Linia 1. substr otwórz nawias okrągły cudzysłów NAUKA cudzysłów przecinek 2 przecinek 3 zamknij nawias okrągły.

Jako wynik działania funkcji otrzymamy podciąg  „AUK”.

Funkcja transform

Aby zamienić w ciągu znaków wszystkie małe liter na wielkie, potrzebujemy w pierwszej kolejności funkcję zmieniającą wielkość wybranego znaku. Przyjmijmy, że za ten element odpowiedzialna jest funkcja zamiana. Działa ona w następujący sposób:

  1. Dokonaj rzutowania litery do typu liczbowego całkowitego.

  2. Jeżeli uzyskana liczba całkowita jest mniejsza niż 123, ale większa niż 96 (kody ASCII od 97 do 122 przeznaczone są na małe litery) odejmij od zmiennej 32 (stała różnica w tabeli ASCII pomiędzy kodami tej samej litery w wariancie wielkim i małym).

  3. Dokonaj rzutowania zmiennej do typu znakowego.

  4. W rezultacie otrzymujemy wielką literę.

Wiemy już, jak zmienić pojedynczy znak, jednak chcemy przeprowadzić tę operację na całym ciągu. Wykorzystamy do tego funkcję transform. Pozwala ona na wykonanie pożądanej operacji na zbiorze, a następnie zwrócenie rezultatów do wybranego zbioru (tego samego bądź innego).

Linia 1. transform otwórz nawias okrągły początek zbioru przecinek koniec zbioru przecinek początek nowego zbioru przecinek operacja zamknij nawias okrągły.

Możemy już wykorzystać obie funkcje do wykonania zadania. Dodatkowo, aby wskazać początek i koniec zbioru, wykorzystamy odpowiednio funkcje początekkoniec. Załóżmy, że zamieniamy wielkości liter w słowie „Litera” znajdującym się w zmiennej słowo.

Linia 1. słowo znak równości cudzysłów Litera cudzysłów. Linia 3. transform otwórz nawias okrągły początek otwórz nawias okrągły słowo zamknij nawias okrągły przecinek koniec otwórz nawias okrągły słowo zamknij nawias okrągły przecinek początek otwórz nawias okrągły słowo zamknij nawias okrągły przecinek zamiana zamknij nawias okrągły.

W wyniku powyższej operacji zmienna słowo będzie zawierała ciąg znaków „LITERA”.

Apostrofy i cudzysłowy

W niektórych językach programowania, np. C++ i Java, istnieje pewna zależność dotycząca używania apostrofów i cudzysłowów.

Znaku pojedynczego apostrofu używa się przy deklaracji, przypisaniu pojedynczego znaku. W poniższym przykładzie zmienna litera jest zmienną znakową (char) i zostaje jej przypisana wartość (pojedynczy znak) przy użyciu właśnie pojedynczych apostrofów.

Linia 1. char litera ⃪ apostrof C apostrof.

Moglibyśmy także nadać wartość zmiennej litera (przypisać znak „C”) w inny sposób, np. podać wartość dziesiętną tej litery. Tutaj pomocna okazuje się wcześniej omówiona tablica ASCII. Następujące linie kodu są bliźniacze:

Linia 1. char litera ⃪ apostrof C apostrof. Linia 3. char litera ⃪ 67.

W przypadku deklarowania oraz przypisywania łańcuchów znaków używane są do tego cudzysłowy. W przytoczonym przykładzie zmienna zdanie jest łańcuchem znaków (string), któremu zostaje przypisany ciąg znaków „ALA MA KOTA”.

Linia 1. string zdanie ⃪ cudzysłów ALA MA KOTA cudzysłów.

W wypadku używania cudzysłowów wszystko jest rozpatrywane jako tekst. W związku z tym zaprezentowana linia kodu nie spowoduje, że w zmiennej zdanie będzie zapisana litera „C”, tylko tekst, łańcuch znaków „67”.

Linia 1. string zdanie ⃪ cudzysłów 67 cudzysłów.

Warto dodać, że w języku Python rozróżnienie pomiędzy cudzysłowem i apostrofem nie istnieje, ponieważ znak i ciąg znaków są tego samego typu.

Funkcje pobierające słowa od użytkownika

W wielu językach programowania wyróżniamy dwie główne metody pobierania łańcuchów znaków od użytkownika:

  • metoda pobierająca pojedyncze słowo, łańcuch znaków (pobiera do pierwszej spacji, odstępu) od użytkownika i zapisujące je do zmiennej,

  • metoda pobierająca wiele łańcuchów, a także odstępów (pobiera do znaku nowej linii).

Słownik

bajt
bajt

wykorzystywana w dziedzinie informatyki jednostka pamięci złożona z 8 bitów

parametr
parametr

zmienna, która jest zdefiniowana przy deklaracji metody lub funkcji