Zmiany

Skocz do: nawigacji, wyszukiwania

String

Dodane 5966 bajtów, 17:17, 11 sty 2014
<!-- #redirect[[Tekstowy typ danych]] -->'''String''' - [[typ danych]] służący do przechowywania ciągu znaków ([[Zmienna (informatyka)|zmiennych]] łańcuchowych). ''String'' można tłumaczyć jako "ciąg znaków" ale także "łańcuch", dlatego używa się również określenia "łańcuch znaków" lub krótko "łańcuch". == Realizacja ==W niektórych [[Język programowania|językach programowania]] jak np. [[Pascal (język programowania)|Pascal]] czy [[PHP]] łańcuchy są typem wbudowanym; w pozostałych jak [[C (język programowania)|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 (informatyka)|tablica]], której element o indeksie 0 przechowuje liczbę znaków w tym ciągu ([[typ (informatyka)|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 [[zmienna wskaźnikowa|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 [[Standard Template Library|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 [[dolar]]a). Zarówno w '''C'''/'''C++''', Pascalu jak i w [[Windows API|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). == Przykłady ==Przykłady operacji na łańcuchach w popularnych językach programowania (pominięto kontrolę błędów). === [[C# (język programowania)|C#]] ===<syntaxhighlight lang=csharp> string napis = "C# to język programowania wysokiego poziomu"; napis += " posiadający stringi"; Console.WriteLine(napis);</syntaxhighlight> === [[Pascal (język programowania)|Pascal]] ===<syntaxhighlight lang=pascal> var napis : String; begin napis := 'Pascal to język programowania wysokiego poziomu'; napis := napis + ' posiadający stringi'; writeln(napis); end.</syntaxhighlight>=== [[C (język programowania)|C]] ===<syntaxhighlight lang=c> char napis[200]; strcpy(napis, "C to język programowania wysokiego poziomu"); strcat(napis, " posiadający stringi"); printf("%s", napis);</syntaxhighlight> === [[C++]] ===<syntaxhighlight lang=cpp>std::string napis = "C++ to język programowania wysokiego poziomu";napis += " posiadający stringi";std::cout << napis;</syntaxhighlight>=== [[Java]] ===<syntaxhighlight lang=java> String napis = "Java to język programowania bardzo wysokiego poziomu"; napis += " posiadający stringi"; System.out.println(napis);</syntaxhighlight> === [[PHP]] ===<syntaxhighlight lang=php> $napis = 'PHP to język skryptowy'; $napis .= " posiadający stringi"; echo $napis;</syntaxhighlight>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]]. === [[Perl]] ===<syntaxhighlight lang=perl> my $napis = "Perl to język programowania wysokiego poziomu"; $napis .= " posiadający Stringi"; print $napis;</syntaxhighlight>=== [[Python]] ===<syntaxhighlight lang=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</syntaxhighlight>=== [[Visual Basic]] ===<syntaxhighlight lang=vb> ' koniecznie w procedurze Dim napis As String napis = "Visual Basic (VB) to język programowania" napis = napis & " posiadający Stringi" MsgBox napis</syntaxhighlight>W [[Visual Basic]]u Stringi realizowane są jako 4-bajtowe [[zmienna wskaźnikowa|wskaźniki]] na pola będące fragmentami struktury [[BSTR]]. [http://pl.wikipedia.org/w/index.php?title=Tekstowy_typ_danych&oldid=35703716 Źródło] == Zobacz też ==<htmlet>zobacz-tez</htmlet>  [[Kategoria:Typy danych]]