string data type (tsz. string data types)
A string ADT fő előnye, hogy a karakterláncokon végrehajtandó műveleteket egységesen, absztrakt módon lehet definiálni, függetlenül attól, hogy a háttérben milyen adattárolási megoldás van (pl. C-s karaktertömb, C++ std::string, Java String, Python str, stb.).
Egy általános String ADT a következő főbb műveleteket definiálja:
Művelet (Operation) | Leírás |
---|---|
Create()
|
Üres string létrehozása |
Length(s)
|
A string hossza (karakterszám) |
IsEmpty(s)
|
Üres-e a string? |
CharAt(s, i)
|
Az i-edik karakter lekérdezése (indexelés) |
Concat(s1, s2)
|
Két string összefűzése |
Substr(s, start, len)
|
Részstring (szelet) lekérdezése |
Insert(s, pos, t)
|
Egy string beszúrása másikba egy pozíciónál |
Delete(s, start, len)
|
Részstring törlése |
Replace(s, old, new)
|
Részstring cseréje |
Find(s, t)
|
Egy részstring keresése egy másikban (pozícióval) |
Equals(s1, s2)
|
Stringek egyenlősége |
Haladóbbak:
Trim(s)
: whitespace eltávolítása elejéről-végérőlToLower(s)
, ToUpper(s)
: kis- és nagybetűssé alakításSplit(s, delimiter)
: feldarabolás szeparátor szerintA műveletek visszatérési értéke általában egy új string (immutable model), vagy módosítják az eredetit (mutable model).
Formálisan a String ADT például így nézhet ki:
ADT String Operations: Create() → String Length(String s) → Integer CharAt(String s, Integer i) → Char Concat(String s1, String s2) → String Substr(String s, Integer start, Integer len) → String Insert(String s, Integer pos, String t) → String Delete(String s, Integer start, Integer len) → String Find(String s, String t) → Integer Equals(String s1, String s2) → Boolean ...
Az absztrakt adattípus NEM mondja meg, hogy hogyan tárolódnak a karakterek (array, linked list, rope, stb.), csak a műveletek jelentését és elvárt eredményét.
A string ADT az informatika egyik leggyakoribb adatszerkezete:
// C++-ban (std::string használata mögött is ADT rejtőzik):
std::string s = "alma";
s = s + "fa"; // összefűzés: "almafa"
size_t i = s.find("fa"); // keresés: 4
s.replace(0, 4, "barack"); // csere: "barackfa"
ADT szintű leírás:
Concat("alma","fa") → "almafa"
Find("almafa", "fa") → 4
Replace("almafa", "alma", "barack") → "barackfa"
std::string
(dinamikus tömb), std::wstring
(széles karakterek)String
(immutable), StringBuilder
(mutable)str
(immutable), bytearray
(bináris karakterlánc)char
+ műveleti függvények (pl. strcpy
, strcat
, stb.)String
, &str
String
(immutable)Mindegyik mögött az ADT szemlélet áll!
A String ADT az egyik leggyakrabban használt absztrakt adattípus, amely nélkülözhetetlen a szoftverfejlesztésben és adatok feldolgozásában. Lehetővé teszi a karakterláncokon történő egységes műveletvégzést, függetlenül a konkrét implementációtól. A modern programozási nyelvek beépített string típusaiban az ADT-elvet követik, így az absztrakció révén a programozó a funkcionalitásra koncentrálhat, a megvalósítás részleteit a rendszerre bízza.