Тип данни стринг (низ)

При работа със софтуерни приложения данните се въвеждат чрез текстови полета.

Последователността от символи се нарича стринг  (string)  или  низ.

Конкретната стойност на един стринг се нарича стрингова константа. Ако на летището се вижда винаги „Welcome in BG", то този поздрав е константа. Ако си представим, че имаме приложение, което трябва всеки път да извежда различен поздрав в зависимост от града, тогава се използва променлива, защото стрингът ще се променя („добър ден").
Множеството от допустими стойности  за един стринг са всички символи. В стринг, с дължина n може да се съхраняват от 0 до n – 1 символа. Променлива от тип стринг (низ) е стрингова променлива.
При типизираните езици декларацията на една променлива включва типа ѝ. С това се заделя памет за тази променлива. Всяка променлива има адрес в паметта.
Примери за декларация на стрингови променливи са: String s; или string s; Задаването на начална стойност на променлива се нарича инициализация. Например: S = "Hi".

 

От кои програмни езици са горните декларации за s?

Пример за инициализация на стринг с празен стринг (стринг, в който няма символи) е: String S = ""; Това са две двойки кавички, разположени последователно. Инициализацията на стринг може да бъде и с използване на стрингова константа.

При присвояване на стойност на променлива от тип стринг се задава конкретна стойност на стринга. В лявата страна на оператора за присвояване стои име на променлива от тип стринг, а в дясната – стойност. Например, ако стринговата променлива е s, един допустим оператор за присвояване е S = "AHA". Изпълнението на следващ оператор от вида s = "OK" води до загубване на предходната стойност („АHА").

 

Възможно ли е да има оператор за присвояване, в който и от двете страни на оператора да стоят стрингови променливи? А константи?

Ще се получи ли съобщение за грешка, ако от двете страни на оператора за присвояване има променливи от различни типове: числов = стрингов?

Допустимите операциии над стрингове (низове)  са: въвеждане/извеждане на стринг; намиране на дължина на стринг; задаване на стойност на стринг; конкатенация (слепване) на стрингове; сравняване на стрингове; копиране на стрингове, търсене на стринг в друг стринг; преобразуване на стринг в число и обратно.

Ако в стрингът s е записана стринговата константа „example", първия елемент от стринга можем да вземем с  s[0], s.charAt(0) или "example"[0].

      Задача 3

Проверете в езика, с който реализирате практическите задачи, кое от посочените по-горе обръщения се използва за достъп до първия символ.

Изучаваните от нас примери са фрагменти от софтуерни проекти. Както вече знаете, в тях въвеждането на стойности става чрез текстови полета. Съдържанието на текстовото поле е стринг. Това е причината първоначално да се изучава този тип данни.
Сега ще разгледаме типичния начин на употреба на стринг в приложение с графичен потребителски интерфейс с един пример на Java.

 

 Измерването на температурата по Фаренхайт се използва в САЩ и на Бахамите. Известна е и книга със заглавие „451 градуса по Фаренхайт".
С какво е характерна тази константа?
Ще изучаваме създаването на приложение (конвертор), което преобразува температура от Фаренхайт в Целзий.
Въвеждаме числови стойности, но във всяко от приложенията на четирите езика реално въвеждаме в текстово поле, което се записва първоначално като стринг, след което го преобразуваме в число и извършваме изчислението. За да запишем резултата пак в текстовото поле или върху етикет, отново преобразуваме в стринг.
Това конвертиране е от един от примерите в първата книга по програмиране на езика С от авторите на самия език Керниган и Ритчи (K&R), поради което ще го разгледаме и ние.

   Използваните компоненти са:
1. Етикет (Label) с име lblFarenheight и текст Farenhejght, което служи да поясни (да именува) текстовото поле след него.
2. Текстово поле с име textField, в което ще въведем температурата по Фаренхайт.
3. Етикет с име lblResult с текст по подразбиране „The Temperature in Celcius is", в което ще се изведе резултатът от изчислението след преобразуване.
int fahrenheitTemp, celsiusTemp;

String text = textField.getText();

fahrenheitTemp = Integer. parseInt(text);

celsiusTemp = (fahrenheitTemp – 32) * 5 / 9;

lblResult.setText(Integer. toString(celsiusTemp)+ "C");

Деклариране на две помощни променливи от тип int.

Помощна променлива text от тип String, в която запазваме въведеното в текстовото поле.

Пеобразуване на съдържанието на текстовото поле в число (температурата по Фаренхайт).

Изчисляваме съответната температура по Целзий.

Връщаме резултата в етикета, като изпълняваме преобразуване в стринг и слепваме изходния стринг с добавянето на текст „C" (за Целзий).

      Задача 4

Отворете папка p77 и разгледайте примера на вашия програмен език.

      Задача 5

Напишете фрагмент от програмен код, в който се изчислява преобразуването на температура, без да създавате и проектирате цялостно приложение.
а) Целзий в Келвин. Помощ: T(K) = T(°C) + 273,15
б) Фаренхайт в Келвин. Помощ: K = (y °F + 459,67) . 5/9 или K = (y °F – 32) / 1,8 + 273,15

В примера с конвертора по-горе се въвеждат данни от тип низ (стринг) по следния начин:
String text = textField.getText();
След извършване на изчислението резултатът се записва в етикета.
Заедно с изчислението се прави и залепване към резултата на двата символа ' ' (интервал) и стринга "C".
Операцията по слепване на два стринга се нарича още конкатенация. lblResult.setText(Integer.toString(celsiusTemp)+"C");

 

Кое от оператора по-горе е стрингова константа?


От коя среда за извършване на изчисления е този екран? В нея също има функция за залепване с име CONCATE (конкатенация = слепване).

Използвайте езика, на който пишете вие, и отговорете на въпросите:


Кои са начините за четене и записване на стрингови променливи от текстово поле в езика за програмиране, който използвате?


Ако работите на практика с Java, каква е разликата между TextField и JTextField?


Може ли да се използват само етикети в тази задача вместо текстовите полета?

      Задача 6

Измислете как можете да слепите три стринга чрез функция за слепване на стрингове, която има два аргумента. Например за получаването на резултат: "Вашият разход на вода е 4 куб. м. за този месец.", ще ви бъде необходимо да слепите стринговете:
1. Вашият разход на вода е
2. 4 (записано като текст)
3. куб. м. за този месец.

Вече знаете, че при използването на текстово поле (TextBox  или  TextField) визуализираме текст или въвеждаме текст в приложение с графичен потребителски интерфейс. В някои от разглежданите от нас езици за програмиране има и варианти за използване на форматирани текстови полета като JFormattedTextField.
Чрез наличните стандартни методи в езиците можем да променяме шрифта, да подравняваме текста и др.