операторы Delphi. Операторы delphi оператор присваивания
Скачать 92.84 Kb.
|
РАБОТА СО СТРОКАМИСтроки могут быть представлены следующими типами: Shortstring, AnsiString и Widestring. Различаются эти типы предельно допустимой длиной строки, способом выделения памяти для переменных и методом кодировки символов. Переменной типа Sortstring память выделяется статически, т.е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа AnsiString и Widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена. Помимо перечисленных выше типов можно применять универсальный строковый тип String, который будет эквивалентен типу Shortstring или AnsiString в зависимости от настроек транслятора Delphi. Настройки можно посмотреть, пройдя в основном меню Delphi путь: Проект – Опции – Компилятор – Опции синтаксиса – Большие строки. Инструкция объявления строки в общем виде выглядит так: Имя: String; или Имя: String [длина]; где имя — имя переменной; string — ключевое слово обозначения строкового типа; длина — константа целого типа, которая задает максимально допустимую длину строки. Пример объявления переменных строкового типа: name: string[20]; buff: string; Если в объявлении строковой переменной длина строки не указана, то ее длина задается равной 255 символам, т.е. объявления stroka: string [255]; и stroka: string; эквивалентны. В тексте программы последовательность символов, являющаяся строкой (строковой константой), заключается в одинарные кавычки. Например, чтобы присвоить строковой переменной S значение, нужно записать: S:= 'Дует ветер'; Отдельные символы строки можно воспринимать как элементы одномерного массива. Для предыдущего примера s[2] определяет символ «у». Процедуры работы со строкамиПроцедура Delete Обращение к такой процедуре в общем виде выглядит так: Delete(S,poz,n); Эта процедура удаляет из строки S, начиная с позиции poz, n символов. Например: S:=’комплекс’; Delete(S,3,4); В результате строка S будет уже содержать слово «кокс». Процедура Insert Обращение к такой процедуре будет выглядеть так: Insert(S1,S2,poz); Эта процедура вставляет строку S1 в S2, начиная с позиции poz. Пример: S1:=’пре’; S2:=’образование’; Insert(s1,s2,0); В результате строка S2 примет значение «преобразование». Процедура Str Обращение к такой процедуре будет выглядеть так: Str(a,S); Эта процедура переводит число а в строку S. Пример. a:=-25; Str(a:5,S); В результате строка S примет значение «__-25». Длина этой строки составит 5 символов, но первые два будут пробелами. Процедура Val Обращение к такой процедуре будет выглядеть так: Val(S,a,cod); Эта процедура переводит значение строки S в число а. Cod – определяет ошибку перевода строки в число. Если Cod=0, то строка перевелась в число, а если нет, то Cod определяет первый слева символ в строке S, который не соответствует числовым данным. Пример 1. Val(’-1.e2’,a,cod); В этом случае Cod=0 и а принимает значение -100.0. В Пример 2. Val(’-1.ez3’,a,cod); А в этом случае Cod будет равен 5, так как пятым символом в строке стоит символ z, а он никак не может определять число. Функции работы со строкамиФункция Copy Функция Copy позволяет выделить из строки подстроку, например: S;=copy(’строка’,3,3); Первая цифра 3 определяет, с какого символа начать копировать подстроку, а вторая цифра 3 определяет число копируемых символов. В результате переменной S будет присвоена строка «рок». Функция Concat Функция Concat позволяет объединять произвольное число строк, записанных в качестве параметров этой функции, например: S:=Concat(’Грозовые’,’ ’,’облака’); Здесь переменная S примет строковое значение «Грозовые облака». Эту функцию можно просто заменить операцией сложения, например: S:=’Грозовые’+’ ’+’облака’; Функция Length Эта функция определяет текущую длину строки, например: i:=Length(’Студент’); Переменная i приметзначение – 7. Функция Pos Обращение к этой функции следующее: Перем.:=Pos(S1,S2); Эта функция ищет в строке S2 образ S1 и возвращает номер первого символа в строке S2, с которого начинается вхождение строки S1 в строку S2, например: i:=Pos(’ос’,’способность’); Здесь i примет значение 3, хотя образ «ос» встречается в строке 2 раза, начиная с позиции 3 и 8. Функция UpCase Эта функция переводит строчные латинские буквы в заглавные, например: c:=UpCase(’q’); Здесь переменная символьного типа «с» примет значение «Q». Для перевода целой строки можно воспользоваться циклом For, например: S:=’Windows 2000/xp’; For i:=1 to Length(S) do S[i]:=UpCase(S[i]); В итоге строка S примет значение «WINDOWS 2000/XP». Рассмотрим несколько примеров работы со строками. Пример 1. Удаление лишних пробелов из строки. Лишними будем называть пробелы, которые стоят в начале и в конце строки, а также между словами, если их больше одного. Допустим, исходная строка будет задаваться в компоненте Edit1, а результат удаления пробелов – в компоненте Label1. Тогда обработчик кнопки удаления будет выглядеть так: // Обработчик нажатия кнопки Procedure TForm1.Button1Click(Sender: TObject); Var S:String; Begin S:=Edit1.Text; // Удаляем начальные пробелы While ((Length(s)>0) and (Copy(s,1,1)=’ ’)) Do Delete (S,1,1); // Удаляем конечные пробелы While ((Length(s)>0) and (Copy(s,length(s),1)=’ ’)) Do Delete(S,Lengrh(s),1); // Удаляем сдвоенные пробелы While ((Length(s)>0) and (Pos(’ ’,s)>0)) Do Delete(S,Pos(‘ ’,s),1); Label1.Caption:=s; End; Пример 2. Подсчет числа слов в строке. Слова могут разделяться одним или несколькими пробелами. Исходная строка пусть будет определяться в компоненте Edit1, а число слов – в компоненте Label1. Обработчик нажатия клавиши «Вычислить» для компонента Button1 может выглядеть следующим образом: // Обработчик нажатия кнопки Procedure TForm1.Button1Click(Sender: TObject); var s:String; i,ind,ns,l:Integer; // ind – индикатор начала слова // ns – счетчик числа слов // l – длина строки Begin S:=Edit1.Text; // Читаем строку l:=length(s); // Определяем ее длину ns:=0; Ind:=0; // Зануляем число слов и индикатор начала слова For i:=1 to l Do Begin // Открываем цикл по длине строки If ((ind=0) and (s[i]<>’ ’)) then Begin // Определяем начало слова Inc(ns); // Наращиваем число слов Ind:=1; // Индикатор начала End else Begin If ((ind=1) and (s[i]=’ ’)) then ind:=0; End; End; Label1.Caption:=’Число слов=’+InttoStr(ns); End; |