Чтение онлайн

на главную - закладки

Жанры

Занимательное программирование – игры с текстом
Шрифт:

В отличие, например, от Бейсика, где строки рассматриваются как «единое целое», в языке Паскаль (а также в ряде других языков, например, в Си) существует дуализм представления строк: к любой строке, определенной как тип string, можно в программе обращаться и как к единому целому (к переменной типа string), и как к одноименному одномерному массиву символов, указывая после имени строковой переменной в квадратных скобках номер (индекс) желаемого символа в строке! (При этом следует помнить, что символы в строках всегда нумеруются с единицы.)

Например, если мы определили строковую переменную оператором

var stroka : string[10];

и

записали в нее строку 'Привет!', то оператор

writeln(stroka[1]);

выведет на экран символ 'П', а оператор

writeln(stroka[7]);

выведет символ восклицательного знака.

Соответственно, одномерный массив строк можно аналогичным образом рассматривать как двумерный массив символов, двумерный массив строк – как трехмерный массив символов и т.д.

Эта замечательная возможность делает ненужным использование функций извлечения символа из строки (типа MID$(<имя строки>,<позиция символа>,1) в Бейсике), поскольку для получения нужного символа достаточно просто обратиться к нему напрямую. Насколько это упрощает решение некоторых задач на работу со строками, мы увидим, когда перейдем к решению таких задач.

И наконец, завершая теоретический экскурс в символьные и строковые типы данных, перечислим некоторые имеющиеся в Паскале стандартные функции и процедуры для работы с символами и строками (информацию о них обычно можно найти в Help’е к используемой системе программирования, мы же будем рассматривать популярную в школьной практике среду программирования Pascal ABC.Net).

При использовании этих функций и процедур необходимо помнить следующее:

– функции возвращают некоторое значение, которое нужно куда-то записать или как-то использовать, поэтому функцию надо записывать или в операторе присваивания (например: d := Length(s); ), или, скажем, в операторе вывода на экран (writeln(Length(s)); );

– процедуры, в отличие

от функций, сами по себе не возвращают значений, а изменяют значение некоторых заданных в них параметров (аргументов), поэтому в составе оператора присваивания или вывода на экран их записывать нельзя. Процедура записывается отдельным оператором, например: Delete(stroka,5,1); – правильная запись (из строки stroka удаляется один символ, стоящий в 5-й позиции), а stroka1 := Delete(stroka,5,1); – неправильная запись.

А теперь перейдем, наконец, к решению задач.

Задача 1

Дана строка символов. Удалить из нее первый знак препинания.

Наиболее простое решение: определить длину введенной строки, реализовать цикл перебора всех ее символов (с 1-го до последнего, имеющего номер, равный значению длины), каждый очередной символ сравнивать с каждым из возможных символов – знаков препинания («.», «,», «;», «!» и т.д.) и при выполнении этого условия каким-то способом убрать его из строки, а затем – прервать цикл просмотра символов.

Реализуем эту идею на Паскале:

Проанализируем этот листинг.

1. Вводится строка и определяется ее длина dl (при помощи стандартной функции Lenght).

2. Переменная k, которая у нас одновременно будет служить для запоминания позиции найденного первого знака препинания и играть роль «флага», обнуляется.

3. Строится цикл for перебора значения переменной i от 1 до значения длины строки dl.

4. В теле цикла мы должны извлечь очередной (записанный в позиции i) символ строки. И вот здесь проявляется удобство «дуализма» обращения к строкам в языке Паскаль: вместо того, чтобы, как в Бейсике, записывать каждый раз функцию, извлекающую нужный символ как подстроку (в Бейсике: MID$(ST$,I,1), в Паскале – Copy(st,i,1) ), мы можем просто обратиться сразу к требуемому символу как к элементу массива st с индексом i: st[i].

5. Очередной символ (st[i]) нужно сравнивать с каждым из возможных символов – знаков препинания, записывая операции сравнения типа st[i] = '.' через логическую связку or в операторе if. Тогда в ветви then (т.е. если очередной символ строки равен хотя бы одному знаку препинания) мы запоминаем его номер позиции (i) в переменной k и прерываем цикл оператором break.

6. После завершения цикла – досрочного по break или «штатного», когда завершен перебор всех символов строки, а знак препинания в ней не найден, нам надо разделить эти два случая. Для этого мы используем «флаговую» функцию переменной k:

– если k не равно нулю, значит, знак препинания найден и его номер позиции в строке записан в k, – тогда мы выполняем операцию «удаления» этого k– го символа из строки (п. 7);

123
Поделиться:
Популярные книги

"Сломанная подкова" Таверна у трёх дорог

Скор Элен
1. Попаданка в деле
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Сломанная подкова Таверна у трёх дорог

Хозяйка собственного поместья

Шнейдер Наталья
1. Хозяйка
Фантастика:
фэнтези
5.00
рейтинг книги
Хозяйка собственного поместья

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон

Кротовский, побойтесь бога

Парсиев Дмитрий
6. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кротовский, побойтесь бога

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Предназначение

Ярославцев Николай
1. Радогор
Фантастика:
фэнтези
2.30
рейтинг книги
Предназначение

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII

Ваше Сиятельство 5

Моури Эрли
5. Ваше Сиятельство
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Ваше Сиятельство 5

Графиня Де Шарни

Дюма-отец Александр
Приключения:
исторические приключения
7.00
рейтинг книги
Графиня Де Шарни

Герцогиня в ссылке

Нова Юлия
2. Магия стихий
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Герцогиня в ссылке

Кристалл Альвандера

Садов Сергей Александрович
1. Возвращенные звезды
Фантастика:
научная фантастика
9.20
рейтинг книги
Кристалл Альвандера