Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

Короткие строки типа 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. Какие компоненты необходимы для работы со строками?

 

Лабораторная работа № 15

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

Цель работы: Изучить свойства компонента TMemo. Написать программу с использованием массивов.

Теория.



Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 615; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.148.106.49 (0.005 с.)