top of page

Лабораторная работа № 14.

 

Использование компонентов многострочного редактора для обработки строковых данных.

 

Цель работы: Использовать строковый тип данных в программах (ввод строки, вывод , преобразование).

Теория.

Типы данных для работы со строками

Короткие строки типа ShortString и String[N]

Короткие строки имеют фиксированное количество символов. Строка ShortString может содержать 255 символов. Строка String[N] может содержать N символов, но не более 255. Первый байт этих переменных содержит длину строки.

Длинная строка типа String

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

            Существует ряд стандартных процедур и функций для работы со строками

Функция Length(s)выдает длину строки s

Функция Concat(s1, S2, …,sn)возвращает строку s1+s2+…sn.

Функция Copy(s, p, k)возвращает фрагмент строки s, который начинается в позиции pи имеет длину k.

Функция Pos(s1, s)ищет первое вхождение подстроки s1 в строку sи возвращает номер первого символа s1 в строке sили 0 если не нашли.

Процедура Delete(s, p, k)удаляет из  строки s фрагмент, который начинается в позиции pи имеет длину k.

Процедура Insert(s, s1, p)вставляет в  строкуs подстроку s1 ,начиная с заданной позиции p.

ВDelphiможно производить преобразования числовых значений в строковые и наоборот. Для этого используются процедуры Str(X:n:d, S)и Val(S, X, e).

 

Пример:

            Задание: написать программу подсчета числа слов в произвольной строке. В качестве разделителя может быть любое число пробелов. Для ввода строк и работы с ними использовать TComboBox. Ввод строки заканчивать нажатием клавиши Enter. Для выхода из программы использовать кнопку Close.

            Панель диалога будет иметь вид (рис. 5.1).

            Текст программы приведен ниже.

 

    // Обработка события активизации формы

procedure TForm1.FormActivate(Sender: TObject);

begin

ComboBox1.SetFocus;                                  // Передачафокуса ComboBox1

end;

 

   // Обработка события нажатия левой клавиши мыши

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then begin   // Еслинажатаклавиша Enter,то...

ComboBox1.Items.Add(ComboBox1.Text);  // Строка из окна редактирования

// заносится в список выбора

ComboBox1.Text:='';                                    // Очистка окна редактирования

end;

end;

 

procedure TForm1.ComboBox1Click(Sender: TObject);

varst : string;

n,i,nst,ind: integer;

begin

  n:=0;                                                           // Содержит число слов

ind:=0;

nst:=ComboBox1.ItemIndex;                     // Определение номера выбранной строки

st:=ComboBox1.Items[nst];             // Занесение выбранной строки в переменную st

for i:=1 to Length(st) do begin                 // Просмотрвсехсимволовстрокиst

       case ind of

           0 : if st[i]<>' ' then begin                   // Есливстретилсясимволпослепробела

ind:=1;

n:=n+1;                                     // Число слов увеличивается на единицу

end;

           1 : ifst[i]=' ' thenind:=0;                  // Если встретился пробел после символов

end;

         end;

 

   Label3.Caption:=IntToStr(n);                 // Вывод числа слов Label3

 

end;

 

end.

 

 

 

 

 

 

Рисунок  14.2

 

Варианты заданий.

 

Вариант 1. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или несколькими пробелами. Найти количество групп с пятью символами.

Вариант 2. Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран самую короткую группу.

Вариант 3. Дана строка, состоящая из групп нулей и единиц. Подсчитать количество символов в самой длинной группе.

Вариант 4. Вывести строку длины N (N — четное), которая состоит из чередующихся символов C1 и C2, начиная с C1. 

Вариант 5. Дана строка. Вывести строку, содержащую те же символы, но расположенные в обратном порядке. 

Вариант 6. Дана строка. Вывести коды ее первого и последнего символа. 

Вариант7. Дана строка. Подсчитать количество содержащихся в ней цифр1|[прописных букв]2|[строчных букв]3. 

Вариант 8. Дана строка. Преобразовать все строчные1|прописные2 латинские3|русские4 буквы в прописные1|строчные2. 

Вариант 9. Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если строку нельзя преобразовать в число, то вывести 0. 

Вариант 10. Дано целое число. Вывести набор символов, содержащий цифры этого числа в исходном1|обратном2 порядке. 

Вариант 11. Дана строка S, изображающая вещественное число в формате с плавающей точкой, и целое число N (> 0). Вывести набор символов, изображающих первые N цифр дробной части этого вещественного числа (без округления). 

Вариант 12. Дана строка, изображающая двоичную1|десятичную2 запись целого числа. Вывести строку, изображающую десятичную1|двоичную2 запись этого же числа. 

Вариант 13. Дана строка, изображающая целое число. Вывести сумму цифр этого числа. 

Вариант 14. Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы "." (точка). 

Вариант 15. Даны два числа: N1 и N2, и две строки: S1 и S2. Получить из этих строк новую строку, объединив N1 первых символов строки S1 и N2 последних символов строки S2. 

Вариант 16. Даны две строки: S1 и S2. Проверить, содержится ли строка S2 в строке S1. Если да, то вывести номер позиции, начиная с которой S2 содержится в S1, если нет, то вывести 0. 

Вариант 17. Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1. 

Вариант 18. Дана строка S и символ C. Удвоить каждое вхождение qhlbnk` C в строку S. 

Контрольные вопросы :

 

  1. Какая функция определяет длину строки  ?

  2. Процедура удаления фрагмента из строки  ?

  3. Функции преобразования, использующие целый тип данных  ?

  4. Как произвести ввод и вывод строки в приложении ?

  5. Какие компоненты необходимы для работы со строками ?

bottom of page