logo search
Программирование в среде Delphy / Программирование в среде Delphi

9.2. Функции работы со строками

Функция 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;