Копирование (извлечение) части строки




Ещё одной важной задачей является копирование части строки. Например, извлечение из текста отдельных слов. Выделить фрагмент строки можно удалением лишних частей, но этот способ неудобен. Функция Copy() позволяет скопировать из строки указанную часть. Функция принимает 3 параметра: текст (строку), откуда копировать, номер символа, начиная с которого скопировать и количество символов для копирования. Результатом работы функции и будет фрагмент строки.

Пример: пусть требуется выделить из предложения первое слово (слова разделены пробелом). На форме разместим Edit1 (TEdit), в который будет введено предложение. Операцию будет выполнять по нажатию на кнопку. Имеем:

procedure TForm1.Button1Click(Sender: TObject); var s,word: string; begin s:=Edit1.Text; word:=Copy(s,1,Pos(' ',s)-1); ShowMessage('Первое слово: '+word); end;

В данном случае из строки копируется фрагмент от начала до первого пробела. Число символов берётся на единицу меньше, т.к. в противном случае пробел также будет скопирован.

Вставка подстроки в строку

Если требуется в имеющуюся строку вставить другую строку, можно использовать процедуру Insert(). Первый параметр - строка для вставки, второй - переменная, содержащая строку, куда нужно вставить, третий - позиция (номер символа), начиная с которого будет вставлена строка. Пример:

procedure TForm2.Button1Click(Sender: TObject); var S: String; begin S:='1234567890'; Insert('000',S,3); ShowMessage(S) end;

В данном случае результатом будет строка "1200034567890".

Ход работы

Задание 1. Создайте приложение, предлагающее пользователю ввести строку, определяющее количество символов в ней и выводящее результат, согласуя окончание слова «символов» с числом символов.

Решение:

1. Создайте папку «Количество символов» и сохраните в ней проект «simvol».

2. Разместите на форме компоненты: Edit1, Label1,2, Button1. Задайте значения свойств Label1.Caption – «Введите текст», Label2.Caption – «В тексте», Button1.Caption – «Вычислить». Удалите текст Edit1 из соответствующего компонента.

3. Для вычисления количества символов во введенной строке и вывода результата создайте процедуру обработчика события щелчка мышью на кнопке «Вычислить».

4. Введите в текст процедуры следующее описание переменных:

Var

N: integer;

S: string;

5. Введите текст тела процедуры обработки события:

Begin

N:= Length(Edit1.Text); {определить число символов}

Label2.Caption:= ‘ В тексте ’;

If N>20 then N:=N mod 10; {выделить последнюю цифру}

Case N of

1: S:= ‘символ’;

2..4: S:= ‘символа’;

0, 5..20: S:= ‘символов’;

End;

Label2.Caption:= Label2.Caption + IntToStr(Length(Edit1.Text)) + S;

End;

6. Сохраните проект и запустите программу на выполнение. Просмотрите результат программы, задавая текст с разным количеством символов и проверяя правильность вывода результатов работы.

 

Задание 2. Создайте приложение, которое предлагает ввести текст, а затем заменить символы «а» на «б» в тексте и подсчитать количество замен.

Решение:

1. Создайте папку «Замена символов» и сохраните в ней проект под названием «zamena», файл модуля сохраните как zmain.pas.

2. Форму приложения назовите «Подсчет и замена символов». На форме расположите три компонента Edit, три компонента Label, один компонент Button и два компонента CheckBox.

3. Задайте значения свойств: Label1.Caption – «Исходный текст на русском языке», Label2.Caption – «Измененный текст», Label3.Caption – «Число замен», Button1.Caption – «Выполнить», CheckBox1.Caption – «Подсчитать число замен», CheckBox2.Caption – «Заменить «а» на «б»». Удалите текст Edit1,2,3 из соответствующих компонентов.

4. Для замены и подсчета символов запишите процедуру обработки события OnClick для кнопки «Выполнить». Введите следующее описание переменных:

Var

S: string;

N: byte;

Примечание: для поиска символа в строке используйте функцию Pos. Для программирования варианта замены символов используйте значение свойства Checked компонента CheckBox.

5. Тело процедуры может быть записано следующим образом:

Begin

N:= 0;

Edit3.Text:= ‘’;

Edit2.Text:= ‘’;

S:= Edit1.Text;

If CheckBox2.Checked then {если включен флажок}

While Pos(‘a’, S) > 0 do {если в строке найдена буква «а»}

Begin

N:= N + 1;

S [ Pos (‘a’, S)]:= ‘б’; {заменить букву «а» на букву «б»}

End;

If CheckBox1.Checked then Edit3.Text:= IntToStr(N);

{вывод числа замен}

Edit2.Text:= S; {вывод измененного текста}

End;

 

6. Сохраните проект и запустите на выполнение.

 

Задание 3*. Измените последнее приложение. Добавьте еще один пункт «Заменить пробелы на тире» и найдите количество таких замен.

 

Индивидуальные задания:

  Дана строка, состоящая из букв и цифр. Вычислить сумму цифр, входящих в строку.
  Дана строка. Проверить, является ли она целым числом.
  Дана строка, состоящая из букв и цифр. Преобразовать строку, оставив в ней только цифры.
  Дана строка, состоящая из слов, разделенных пробелом. Определить количество слов, в которых есть хотя бы одна буква "а", или "А".
  Дана строка, состоящая из слов, разделенных пробелом. Определить и выписать самое короткое слово.
  Дана строка, состоящая из слов, разделенных пробелом. Определить и выписать самое длинное слово.
  Дана строка, состоящая из слов, разделенных пробелом. Преобразовать строку, переписав в ней все слова в обратном порядке.
  Дана строка, состоящая из слов, разделенных пробелом. Вывести строку, состоящую из этих же слов, расположенных в алфавитном порядке.
  Дана строка. Вывести все ее символы в алфавитном порядке.
  Дана строка, состоящая из букв и цифр. Определить количество четных и нечетных цифр.
  Дана строка, состоящая из русских слов. Определить количество гласных букв в строке
  Дана строка, состоящая из букв и цифр. Определить количество букв в строке.
  Дана строка, состоящая из русских слов, разделенных пробелом. Определить слово, с наибольшим количеством гласных букв.
  Дана строка, состоящая из русских слов, разделенных пробелом. Определить слово, с наименьшим количеством гласных букв.
  Дана строка. Зашифровать ее, изменив код каждого символа на число N.
  Дана зашифрованная строка и ключ для расшифровки, представляющий собой число N. Расшифровать строку, изменив код каждого символа строки на N.
  Дана строка. Вывести строку, состоящую из кодов символов исходной строки, разделенных пробелом.
  Дана строка, состоящая из целых чисел от 32 до 255, разделенных пробелом. Вывести строку, заменим каждое число символом, код которого оно представляет в кодовой таблице и удалив пробелы.
  Дана строка-предложение на русском языке. Определить суммарное количество содержащихся в строке знаков препинания (точка, запятая, двоеточие и тире).
  Дана строка, состоящая из слов, разделенных одним пробелом. Вывести строку, состоящую из этих же слов, записанных в обратном порядке. Например, "Я изучаю программирование" => "программирование изучаю Я".
  Дана строка, состоящая из слов, разделенных одним пробелом. Вывести строку, состоящую из этих же слов, каждое из которых записано в обратном порядке.
  Дана строка, состоящая из слов, разделенных одним пробелом. Вывести строку, состоящую из этих же слов, расположенных в алфавитном порядке.
  Дана строка, состоящая из слов, разделенных одним пробелом. Вывести самое короткое слово.
  Дана строка, состоящая из слов, разделенных одним пробелом. Вывести самое длинное слово.
  Создайте приложение для ввода текста в строку и подсчета количества буквы «о».
  Создайте приложение для ввода текста в строку и определения «перевертыша». (Например слово «шалаш»).

Содержание отчета:

1. Наименование, тема, цель работы.

2. Таблица идентификаторов.

3. Блок-схема алгоритма.

4. Скриншоты выполнения программы на контрольном примере.

5. Код программы.

6. Выводы по работе.

 

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

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

2. Для чего предназначена функция Pos?

3. Для чего предназначена функция Length?

4. Какие еще строковые функции и процедуры вы знаете?

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: