Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Типы данных для работы со строками
Короткие строки типа 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); var st: 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: if st[i]=' ' then ind: =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. Какие компоненты необходимы для работы со строками?
Лабораторная работа № 17 Использование компонентов многострочного редактора для одномерных массивов. Цель работы: Изучить свойства компонента TMemo. Написать программу с использованием массивов. Теория. Популярное:
|
Последнее изменение этой страницы: 2016-08-31; Просмотров: 683; Нарушение авторского права страницы