String - Google

String

Z Wikipedii

Skocz do: nawigacji, szukaj

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?';
  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ż


Paypal przejmie pełną odpowiedzialność za transakcje
Klienci portalu aukcyjnego eBay, którzy padli ofiara oszustów, mogą spodziewać się całkowitego zwrotu kosztów, wliczając koszty przesyłki.
11 poprawek od Microsoft (uwaga na fałszywe aktualizacje!)
W najbliższy wtorek Microsoft udostępni 11 poprawek, z których cztery eliminują luki ocenione jako &quot;krytyczne&quot;. Mogą one zostać wykorzystane do zdalnego wykonania szkodliwego kodu. Dziury te występują w Windows, Internet Explorer, Host Integration Server i Excelu.
40 proc. fałszywych kont na Facebook
Spamerzy i autorzy szkodliwego oprogramowania w pełni wykorzystują możliwości, jakie oferują portale społecznościowe.
Jest pierwsza wersja OpenOffice.org 3.0
Darmowy pakiet biurowy OpenOffice jest już dostępny w wersji 3.0.
Przesłuchaj zanim opublikujesz!
Głosowe odczytywanie komentarzy na YouTube &#8211; nowa usługa najpopularniejszego serwisu wideo.
Linki: Strona g³ówna