Tekstowy typ danych

Z Wikipedii, wolnej encyklopedii
(Przekierowano z String)
Skocz do: nawigacji, szukaj

String - typ danych służący do przechowywania ciągu znaków (zmiennych łańcuchowych).

String po angielsku znaczy "ciąg znaków" ale także "łańcuch", dlatego używa się również określenia "łańcuch znaków" lub po krótko "łańcuch" . Etymologicznie odpowiada słowu "strzęp", również dłużej ugruntowanemu frazeologicznie.

Spis treści

[edytuj] Realizacja

W niektórych językach programowania jak np. Pascal czy PHP łańcuchy są typem wbudowanym; w pozostałych jak C, C++, Java realizuje się je za pomocą innych struktur języka.

W tradycyjnych realizacjach Pascala (np. Turbo Pascal) zmienna typu String może przechowywać do 255 znaków, a w definicji String[długość] może przechowywać do długość znaków, a ma rozmiar długość+1 i jest zaimplementowana jako tablica, której element o indeksie 0 przechowuje liczbę znaków w tym ciągu (typu bajt więc maksymalna długość łańcucha wynosi 255). W późniejszych implementacjach tego języka (np. Object Pascal w Delphi) dodano inną formę reprezentacji łańcucha, w którym maksymalna długość wynosi 2^32 bajtów i jest dynamicznie przydzielana w zależności od długości napisu, typ ten jest rozszerzeniem sposobu implementacji używanego przez C, dodano również typ w stylu C (PChar).

W C łańcuchy reprezentuje się jako tablice znaków a operacje na nich wykonuje z użyciem wskaźników. Rozmiar takiej tablicy może być dowolny, nie jest oddzielnie przechowywany, a programista musi zadbać o to by napis nie przekroczył rozmiaru bufora (przepełnienie bufora), a także by pamięć po buforze była zwolniona. Napis nie musi wypełniać całej tablicy znacznikiem końca napisu jest znak o kodzie zero \0. Taką reprezentację nazywa się z ang. null terminated string.

W C++ oprócz tradycyjnych ciągów znaków w stylu C istnieje w bibliotece standardowej klasa std::string. Ukrywa ona niewygodne aspekty używania napisów w stylu C: zarządzanie pamięcią, określanie długości, łączenie napisów, wstawianie, usuwanie i inne manipulacje na napisie. Dodatkowo pozbyto się problemu znaku kończącego - znak o kodzie \0 może być elementem napisu std::string (długość przechowywana jest oddzielnie). Ponieważ biblioteka standardowa (bazująca w tym zakresie na STL) została dość późno dołączona do oficjalnego standardu, wiele kompilatorów dostarcza własne implementacje typów napisowych - np. String, AnsiString, CString. Również niektóre starsze biblioteki (jak np. Qt) dostarczają własnych typów obsługi napisów.

Przy wywoływaniu funkcji 13h przerwania 10h kart graficznych od EGA wzwyż w architekturze IBM PC i pochodnych, służącej do wyświetlania łańcucha na ekranie, podaje się wskaźnik na początek łańcucha i jego długość. Przerwania systemu MS-DOS wykorzystują wariant ASCIIZ polegający na zamianie terminatora 00h na $ (symbol dolara).

Zarówno w C/C++, Pascalu jak i w WinAPI spotkać się można z wariantami łańcuchów Ansi oraz Wide, który jest wersją stosującą Unicode (na każdy znak przeznaczone są 2 bajty).

[edytuj] Przykłady

Przykłady operacji na łańcuchach w popularnych językach programowania (pominięto kontrolę błędów).

[edytuj] C#

   string napis = "C# to język programowania wysokiego poziomu";
   napis += " posiadający stringi";
   Console.WriteLine(napis);

[edytuj] Pascal

 var napis : String;
 begin
   napis := 'Pascal to język programowania wysokiego poziomu';
   napis := napis + ' posiadający stringi';
   writeln(napis);
 end.

[edytuj] C

 char napis[] = "C to język programowania wysokiego poziomu posiadający stringi";
 printf("%s",napis);

[edytuj] C++

std::string napis = "C++ to język programowania wysokiego poziomu";
napis += " posiadający stringi";
std::cout << napis;

[edytuj] Java

 String napis = "Java to język programowania bardzo wysokiego poziomu";
 napis += " posiadający stringi";
 System.out.println(napis);

[edytuj] PHP

 $napis = 'PHP to język skryptowy';
 $napis .= ' posiadający stringi';
 echo $napis;

W PHP można się spotkać z stringami realizowanymi za pomocą typu Variant o podtypie String. Podobnie jest w innych językach skryptowych takich jak VBS czy JavaScript.

[edytuj] Clarion

GLO:NAPIS='Clarion to język programowania'
GLO:NAPIS=CLIP(GLO:NAPIS)&' posiadający stringi.'
MESSAGE(CLIP(GLO:NAPIS))

[edytuj] Perl

 my $napis = "Perl to język programowania wysokiego poziomu";
 $napis .= " posiadający Stringi";
 print $napis;

[edytuj] Python

 napis = "w Pythonie możemy tworzyć stringi cudzysłowami"
 napis += ', apostrofami'
 napis += """ lub potrójnymi cudzysłowami
 (jeśli chcemy miec tekst w wielu liniach)"""
 print napis

[edytuj] Visual Basic

 ' koniecznie w procedurze
 Dim napis As String
 napis = "Visual Basic (VB) to język programowania"
 napis = napis & " posiadający Stringi"
 MsgBox napis

W Visual Basicu Stringi realizowane są jako 4-bajtowe wskaźniki na pola będące fragmentami struktury BSTR.

[edytuj] Zobacz też

Wikisłownik
Zobacz hasło łańcuch w Wikisłowniku
Osobiste
Przestrzenie nazw
Warianty
Działania
Nawigacja
Dla czytelników
Dla wikipedystów
Drukuj lub eksportuj
Narzędzia
W innych językach