русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Занятие 2. Строка. Тип данных string. Строковые переменные, их описание. Длина строки. Операции над строками


Дата добавления: 2014-11-28; просмотров: 990; Нарушение авторских прав


 

Строка (string) – это последовательность литер. Литерные строки уже использовались нами в качестве аргументов операторa write при изучении темы "Ввод-вывод". Теперь познакомимся с ними подробнее.

Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.

Например,

MaxLine : string;

City : string[30]

Строковая переменная может иметь атрибут длины, определяющий ее максимальную длину.

Текущая длина строковой переменной может быть определена с помощью встроенной функции Length. для заданного значения типа string эта функция возвращает целое значение, показывающее количество литер в строке.

Выражения, в которых операндами служат строки, называются строковыми выражениями.

Над строками определены две операции:

1. Операция сцепления (+) применяется для сцепления нескольких строк в одну.

Например,

SumStr := 'Турбо'+'Паскаль'+'7.0'

2. Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевой тип.

Например, выражение 'MS-DOS'<'MS-Dos' имеет значение True

Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная.

Строки считаются равными, если они совпадают по длине и содержат одни и те же символы на соответствующих местах в строке.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания. Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, то все лишние символы справа отбрасываются.



Допускается смешение в одном выражении операндов строкового и символьного типа.

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.

Например, чтобы обратиться к третьему символу строки SumStr надо записать SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.

Для эффективного программирования алгоритмов обработки текстов необходимо хорошо понимать внутреннюю структуру представления строк в памяти. Строки реализованы достаточно просто. Для хранения строковых переменных выделяется память, на единицу большая максимальной длины строки. Начальный байт этой памяти отводится для хранения текущей длины строки, следующие байты - для символов самой строки. Так как элементы строк стандартно нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.

 


Stroka
М А М А __ М Ы Л А __ Р А М У            

Stroka[4]

 

 

Важно отметить, что имеется возможность динамически управлять текущей длиной строки. Следующая программа показывает автоматическое изменение длины строки после тех или иных операций с нею. Обратите внимание, что общий (определяемый с помощью стандартной функции SizeOf) размер памяти, отведенной для хранения строки все время остается неизменным.

Program StringLength;

Var

S : string; {макс. длина строки = 255}

Begin

S:=''; {пустая строка}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=0}

S:='Пример длинной строки'; {присваиваем строке некоторое значение}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=21}

Delete(S,7,8); {удаляем из строки 8 символов, начиная с 7}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=13}

S:=S+' символов'; {добавляем к строке строку}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=22}

End.

Внимание! При решении задач со строковыми переменными Вы можете столкнуться с распространенной трудноуловимой ошибкой, когда после присваивания некоторым элементам строки символов ни содержимое, ни длина строки не изменяются. Разберемся, с чем это связано.

Очень важно понимать, что при доступе к некоторому элементу строки значение ее текущей длины не проверяется. Это иллюстрирует следующая программа:

Program StringElements;

Var

S : string; {макс. длина строки = 255}

Begin

S:='ABCD'; {инициализация строки}

writeln (S,' ',Length(S)); {вывод строки и ее длины}

S[5] := 'E'; {присваивание элементу строки}

writeln (S,' ',Length(S)); {ни сама строка, ни ее длина не изменились}

End.

Присваивание пятому элементу строки некоторого значения не изменяет длину строки, что подтверждает вывод на экран ее содержимого и длины (конечно само присваивание реально произошло, но на значение текущей длины строки в нулевом байте это никакого влияния не оказало). Работа с элементами строки без учета ее текущей длины и является ошибкой программиста. Посмотрите следующую программу:

Program StringElements2;

Var

Str : string[26]; {длина строки = 26}

i : integer;

Begin

Str:='A';

for i := 1 to 26 do

Str[i] := Chr (Ord('A')+i-1);

writeln(Str);

End.

Предполагается, что данная программа должна сформировать строку из 26 символов, содержимым которой является последовательность заглавных букв латинского алфавита. Однако вызов процедуры writeln показывает, что содержимым переменной Str будет строка из одного символа 'А'. Природа совершенной ошибки заключается в том, что присваивание значений элементам строки не влияет не текущую длину, которая была установлена равной 1 при первом присваивании. Поэтому правильной будет следующая программа:

Program stringElements3;

Var

Str : string[26]; {длина строки = 26}

i : integer;

Begin

S:='';

for i := 'A' to 'Z' do

Str := Str + i;

writeln(Str);

End.

Операция конкатенации, как и все стандартные операции, работающие со строками, в отличие от поэлементного присваивания, изменяет длину строки, что дает корректный результат. Кроме того, вторая программа работает непосредственно с символами букв. Наконец, не следует забывать инициализировать строку перед ее заполнением (первый оператор программы). В противном случае, так как начальная длина строки является неопределенной, можно получить произвольный результат; не стоит рассчитывать на то, что в нулевом байте стоит ноль.

Для обработки строковых данных можно использовать встроенные процедуры и функции:

1. Delete (Str,Poz,N) – удаление N символов строки Str, начиная с позиции Poz.

2. Insert (What,Where,Poz) – вставка строки What в строку Where, начиная с позиции Poz.

3. Copy (Str,Poz,Nstr) – выделяет строку длиной Nstr, начиная с позиции Poz, из строки Str.

4. Concat (Str1,Str2,...,StrN) – выполняет сцепление строк в том порядке, в каком указаны в списке параметров.

5. Poz (What,Where) – обнаруживает первое появление подстроки What в строке Where.

6. UpCase (Ch) – преобразует строчную букву в прописную.

7. Str (Number,Stroka) – преобразует число в строку.

8. Val (Stroka,Number,Code) – преобразует строку в число и выдает код правильности преобразования.



<== предыдущая лекция | следующая лекция ==>
Занятие 1. Тип данных char. Операции над символами | Задачи для самостоятельного решения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.052 сек.