See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
String - Wikipedia, wolna encyklopedia

String

Z Wikipedii

String to nazwa typu danych służącego do przechowywania napisów (zmiennych łańcuchowych).

String z angielskiego znaczy dosłownie ciąg, sznur, więc jednym ze sposobów w jakim można mówić o tym typie to ciąg znaków. Innymi określeniami są łańcuch znaków lub po prostu łańcuch.

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 ma stałą wielkość 256 bajtó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 odpowiednio 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 wszystkie 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] 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 = malloc ( sizeof(char)*1024 );
strcpy(napis, "C to język programowania wysokiego poziomu");
strcat(napis, " posiadający stringi");
printf("%s",napis);
free(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 = 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.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -