Низ: Разлика между версии
Изтрито е съдържание Добавено е съдържание
м стринг > низ редактирано с AWB |
м форматиране: 41x тире, 16x нов ред, 11 интервала, 6lokavica, тире-числа (ползвайки Advisor) |
||
Ред 1:
В компютърните науки '''низ''' е крайна поредица от символи (представляващи краен брой '''знаци'''). Елементите му евентуално могат да бъдат променяни, както и дължината му. Низовете обикновено се разглеждат като тип данни и често са имплементирани като масиви от байтове (или думи), които съхраняват последователност от елементи, използвайки [[Символно_кодиране|кодиране на символите]].
В зависимост от [[Език_за_програмиране|езика за програмиране]] и използваният тип данни, [[Променлива_(програмиране)|променлива]]
Във [[Формални_езици|формалните езици]], които се използват в математическата логика и теоретичната информатика, низ е крайна последователност от символи от дадено множество,
== Дължина на низ ==
Въпреки че низовете могат да имат произволна (но ограничена) дължина, в повечето езици за програмиране дължината е ограничена до изкуствен максимум. По принцип има два вида низови: с фиксирана дължина
== Формална теория ==
Line 19 ⟶ 20:
== Символни низове в C# ==
В [[Си_Шарп|C#]] символните низове са дефинирани в класа <code>System.String</code>. За декларация по време на писане на код се използва служебната дума <code>String</code>. Тъй като <code>String</code> е клас, той е референтен тип данни и в стека на програмата се съхранява само указателя, сочещ към поле от динамичната памет, където се съхранява реалната стойност на обекта..<ref name="Въведение в C#">[http://downloads.academy.telerik.com/svn/csharppart1/Materials/Intro-CSharp-Book-1.00.pdf Въведение в C#], 465
=== Създаване на <code>String</code> ===
Line 42 ⟶ 43:
Трябва да се отбележи, че символните низове са неизменими и всяка промяна на един низ води до създаване на нов, в който се пази резултата и пренасочване към него. Това може силно да забави изпълнението на една програма при много редакции на един низ (например долепване на символи в [[Цикъл_(програмиране)|цикъл]]). В такива случаи използваме класа <code>StringBuilder</code>, който оптимизира работата с низове.<br><br>
'''Сравняване на низове'''
:'''Сравняване за еднаквост.''' Удобен за това е метода <code>Equals()</code>, който работи еквивалентно на <code>==</code>. Метода връща булев резултат <code>true</code> при еднакви низове и <code>false</code> при различни. Трябва да се има в предвид, че по този начин се сравняват побуквено елементите на масива, като се прави разлика между главни и малки букви. Често ще ни интересува само текстовото съдържание без регистъра на буквите, затова може да използваме метода <code>Equals()</code> с параметър
<big><source lang="csharp">
string word1 = "C#";
Line 158 ⟶ 159:
=== String Builder ===
Конкатенирането на низове е много бавна операция. Това е заради факта, че всеки път трябва да се заделя нов буфер и да се презипише цялата информация в низа наново, освен това стария буфер е неизползваем и той трябва да бъде изтрит от <code>Garbage collector</code>.
Затова се използва специално направен клас <code>StringBuilder</code>, този клас има предварително зададен буфер, който може да бъде динамично променян, благодарение на което работата със символни низове е много по-бърза. Когато сме завършили низа можем да извикаме метода <code>ToString()</code>, който да го преобразува в нормален низ.
Line 177 ⟶ 179:
== Символни низове в Java ==
В езика за програмиране [[Java]], символните низове са [[Обект_(програмиране)|обекти]].
В Java [[Клас_(програмиране)|класът]] <code>String</code> се използва за създаване и обработка на символни низове. Последователностите от символи, записани в [[Променлива_(програмиране)|променлива]] от класа, са [[Неизменим_обект|неизменими]] (immutable). Веднъж записано съдържанието на едно място, то не може да бъде променяно директно.
Line 186 ⟶ 188:
В този случай, <code>"Hello, world!"</code> е низов [[литерал]] – поредица от символи в кода, които са заградени с двойни кавички.
За отпечатване на съобщение в кавички е необходимо да се използва [[Екранираща_последователност|екраниращ]] символ (escaping character) – обратна наклонена черта (\).
<source lang="java">String quotedString = "She said \"Hello, World!\""; //She said "Hello, world!" </source>
Може да се
<source lang="java">
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
Line 218 ⟶ 221:
System.out.println(fullGreeting); //Hello, world!
</source>
Възможно е долепване на различни типове обекти. За всеки обект, който не е от тип <code>String</code>, съществува метод за преобразуването му
=== Използване на <code>String.format()</code> ===
Line 225 ⟶ 228:
String example = String.format("%.2f", 3.141593); // "3.14"
</source>
=== Извличане на част от низ ===
Извличането на част от низ в отделна променлива се прави чрез метода <code>substring()</code>, като зададем начална и крайна позиция в текста.
<code>String substring(int beginIndex, int endIndex)</code>
В случай че, не е упоменат <code>endIndex</code>, за край се счита последния символ от оригиналния символен низ.
<source lang="java">
Line 235 ⟶ 240:
</source>
=== Разцепване
Методът <code>split</code> в класа <code>String</code> връща масив от символни низове състоящи се от поднизове разцепени от един или група от разделители.
<source lang="java">
Line 264 ⟶ 269:
=== Класовете <code>StringBuilder/StringBuffer</code> ===
Класовете <code>StringBuilder/StringBuffer</code> са алтернатива на класът <code>String</code>. Те могат да бъдат използвани навсякъде където се използват символни низове. Тези класове са по-приспособими от класът <code>String</code>. При тях може да се добавя ново съдържание.
По-важни методи в <code>StringBuilder</code>:
Line 274 ⟶ 279:
// 27
</source>
* <code>length()</code>
<source lang="java">
StringBuffer stringBuffer = new StringBuffer(“Hello World!”);
Line 280 ⟶ 285:
// 11
</source>
* <code>charAt(int index)</code>
<source lang="java">
String example = "Welcome to Java";
Line 287 ⟶ 292:
//J
</source>
* <code>append(…)</code>
<source lang="java">
StringBuffer example = new StringBuffer("Welcome");
Line 321 ⟶ 326:
//aidepikiw
</source>
* <code>toString()</code>
<source lang="java">
Integer example = 5;
Line 331 ⟶ 336:
=== Сравняване на символни низове ===
* <code>boolean endsWith(String suffix)/ boolean startsWith(String prefix)</code>
<source lang="java">
String example = new String("Welcome to Wikipedia!");
Line 354 ⟶ 359:
// true
</source>
* <code>int compareTo(String anotherString)</code>
<source lang="java">
String example = "Hello, World";
Line 371 ⟶ 376:
//0
</source>
* <code>boolean equals(Object anObject)</code>
<source lang="java">
boolean boolObject1 = new Boolean(true);
Line 382 ⟶ 387:
// boolObject1: true and boolObject2: false are equal: false
</source>
* <code>boolean equalsIgnoreCase(String anotherString)</code>
<source lang="java">
String example1 = new String("Welcome to Wikipedia!");
Line 400 ⟶ 405:
== Низове в C ==
Низът в езика [[C_(език_за_програмиране)|С]] представлява последователност от символи, които завършват с терминираща нула ('\0'). Използва се [[ASCII]] таблица за символи.
Няма запазена дума <code>string</code>, затова трябва да използваме ето тези конструкции:
<source lang="c">
Line 405 ⟶ 411:
</source>
В този пример се вижда какво представлява низа отвътре. Забележете, че трябва да се остави място за [[Терминираща_нула|терминиращата нула]], защото благодарение на нея се разбира кога сме достигнали края на низа.
Тази конструкция може да се запише и съкратено по този начин:
<source lang="c">
Line 450 ⟶ 457:
free(str1); // Освобождаване на първия низ.
// Можем освен това да пренасочваме и [[Указател_(програмиране)|указателите]] ако искаме
// но тогава ще е добре и да освободим и памета от str2 с ключовата дума free.
</source>
== Низове в C++ ==
В [[C%2B%2B|С++]] съществува клас, намиращ се в <code>namespace std</code>, който поддържа работа с низове. Думата <code>string</code> е ключова дума. Запазването на низове в памета е по начина по който се запазват и в C(накрая има терминираща нула).
Работата със низове е много по-удобна, защото са предефинирани аритметичните знаци <code>+</code> и <code>=</code>.
<source lang="cpp">
Line 486 ⟶ 495:
== Низове в PHP ==
В [[PHP]] символът един байт, т.е., съществуват точно 256 възможни символа. Това също означава, че PHP няма естествена поддръжка за Unicode.
Знаците в даден низ могат да бъдат достъпвани и изменяни чрез указване на отместване от нулата за желания знак след низа посредством квадратни скоби, например $str[42], така че бихте могли да мислите за даден низ като за [[Масив_(програмиране)|масив]] от знаци.
<source lang="php">
$txt="Hello world!";
Line 502 ⟶ 512:
</source>
<code>strlen()</code>
<source lang="php">
echo strlen("Hello world!");
</source>
<code>strpos()</code>
<source lang="php">
echo strpos("Hello world!","world");
Line 515 ⟶ 525:
== Низове в JavaScript ==
Низът в [[JavaScript]] са последователност от знаци/символи, които започват и завършват с единични или двойни кавички. Освен да се работи с низовете като букви/знаци, JavaScript предлага възможността да се работи с тях и като [[Обект_(програмиране)|обекти]] с много свойства и функции. Това е полезно, когато трябва да се приложат определени процеси върху низът.
Line 533 ⟶ 542:
'''Методи'''
* <code>anchor()</code>
* <code>big()</code>
* <code>bold()</code>
* <code>charAt()</code>
<source lang="javascript">var myString = 'Some text';
Line 542 ⟶ 551:
// Tози пример ще върне елементът на позиция 4: e </source>
▲* <code>charCodeAt()</code> - Намира смволния код на символ от дадена позиция в низа
<source lang="javascript">
Line 550 ⟶ 558:
</source>
* <code>concat()</code>
<source lang="javascript">
Line 560 ⟶ 568:
</source>
* <code>fixed()</code>
* <code>fontcolor()</code>
* <code>fontsize()</code>
* <code>fromCharCode()</code>
<source lang="javascript">
//fromCharCode(c1, c2,...)
Line 571 ⟶ 579:
//output: HELLO
</source>
* <code>indexOf()</code>
<source lang="javascript">
//indexOf(char/substring)
Line 578 ⟶ 586:
alert("Pesho is in there!")
</source>
* <code>italics()</code>
* <code>lastindexOf()</code>
<source lang="javascript">
//lastIndexOf(substr, [start])
Line 586 ⟶ 594:
//output: 11
</source>
* <code>link()</code>
* <code>match()</code>
<source lang="javascript">
//match(regexp) //select integers only
Line 602 ⟶ 610:
//output: null
</source>
* <code>replace()</code>
<source lang="javascript">
//replace(substr, replacetext)
Line 609 ⟶ 617:
//output: Ivan is 22 years old
</source>
* <code>search()</code>
* <code>slice()</code>
<source lang="javascript">
/slice(start, end)
Line 617 ⟶ 625:
text.slice(5,8) //returns "dar"
</source>
* <code>small()</code>
* <code>split()</code>
<source lang="javascript">
//split(delimiter)
Line 626 ⟶ 634:
var word=message.split("l")
</source>
* <code>strike()</code>
* <code>sub()</code>
* <code>substr()</code>
* <code>substring()</code>
<source lang="javascript">
//substring(from, [to])
Line 637 ⟶ 645:
//output: Wikipedia
</source>
* <code>sup()</code>
* <code>toString()</code>
* <code>toLowerCase()</code>
<source lang="javascript">
//toLowerCase()
Line 647 ⟶ 655:
//output: hello wikipedia
</source>
* <code>toUpperCase()</code>
<source lang="javascript">
//toUpperCase()
|