Лабораторная работа № 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.
Контрольные вопросы :
-
Какая функция определяет длину строки ?
-
Процедура удаления фрагмента из строки ?
-
Функции преобразования, использующие целый тип данных ?
-
Как произвести ввод и вывод строки в приложении ?
-
Какие компоненты необходимы для работы со строками ?