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.
[edytuj] Zobacz też
| W.Brytania: minister finansów ostrzega! |
|
Brytyjski minister finansów (kanclerz skarbu) Alistair Darling ostrzegł wywiadzie dla sobotniego "Timesa", że spowolnienie brytyjskiej gospodarki jest głębsze niż sądził wcześniej i potrwa lata, a nie miesiące; on sam nie wie, jak długo.
|
| W Hiszpanii alarm kryzysowy - rośnie bezrobocie |
|
W Hiszpanii po raz pierwszy od 1996 roku w czerwcu wzrosło bezrobocie, a premier Jose Luis Rodriguez Zapatero zwołał w sobotę na przyszły tydzień pilne posiedzenie grupy wybitnych ekonomistów, aby wypowiedzieli się na temat objawów kryzysu w gospodarce hiszpańskiej.
|
| Amerykanie nie majÄ… na Coca-ColÄ™ |
|
Coca-Cola i inne napoje amerykańskiego giganta od września podrożeją. Coca-Cola Enterprises, dystrybuująca produkty koncernu w Stanach, zapowiedziała, że podniesie ceny - informuje "Rzeczpospolita".
|
| TV Puls zostanie sprzedany? |
|
Kontrolowany przez Ruperta Murdocha koncern medialny News Corp. może sprzedać stacje telewizyjne w Europie Środkowej - informuje "Gazeta Wyborcza".
|
| Najnowsze trendy w PR prosto z europejskiego rynku |
|
W dniach 18-19 września w Hotelu Holiday Inn w Warszawie odbędzie się IV Kongres Public Relations Trendy 2009. Jest to już jego czwarta edycja, skupiająca co roku ponad 150 uczestników z polskiego środowiska PR.
|