
- •О.Ф. Власенко, и.В. Беляева символы и строки в языке turbo pascal
- •Оглавление
- •Введение
- •Символьный тип Символьный тип char
- •Функция Ord
- •Функция Chr
- •Функция Succ
- •Функция Pred
- •Функция UpCase
- •Процедура Inc
- •Процедура Dec
- •Примеры использования стандартных процедур и функций обработки символов
- •Строки Встроенный тип string
- •Операции над строками string
- •Правила сравнения двух строк
- •Стандартные процедуры и функции для работы со строками string
- •Процедура Delete
- •Процедура Insert
- •Процедура Str
- •Процедура Val
- •Функция Length
- •Функция Concat
- •Функция Copy
- •Функция Pos
- •Примеры использования стандартных процедур и функций обработки строк
- •Множества
- •Операции над множествами
- •Пример использования множеств
- •Пример Обработки массива строк Задача “Поиск символов в тексте”
- •Задача “Поиск слов в строке и удаление символов”
- •Лабораторная работа “обработка строк” Цель работы
- •Общее задание
- •Простые варианты
- •Средние варианты
- •Сложные варианты
- •Список литературы
- •Символы и строки в языке turbo pascal
- •432027, Г. Ульяновск, Сев. Венец, 32.
Задача “Поиск слов в строке и удаление символов”
В качестве второго примера возьмем такую задачу: в строке из слов, начинающихся с двух согласных букв, удалить все гласные буквы.
{
Пример обработки строки.
Удаляются все гласные буквы в словах, которые начинаются
с двух согласных букв
}
{=====================================================}
{Функция IsLetter.
Возвращает TRUE, если Ch является русской буквой.
Иначе возвращает False.}
function IsLetter(Ch: char): boolean;
begin
IsLetter := ch in ['А'..'Я','а'..'п','р'..'я','ё','Ё'];
end;
{=====================================================}
{Функция IsSoglasn.
Возвращает TRUE, если Ch является русской согласной буквой.
Иначе возвращает False.}
function IsSoglasn(ch:char):boolean;
begin
IsSoglasn := ch in ['б','в','г','д','ж','з','й','к','л',
'м','н','п','р','с','т','ф','х','ц',
'ч','ш','щ','ъ','ь',
'Б','В','Г','Д','Ж','З','Й','К','Л',
'М','Н','П','Р','С','Т','Ф','Х','Ц',
'Ч','Ш','Щ','Ъ','Ь'];
end;
{=====================================================}
{Функция IsGlasn.
Возвращает TRUE, если Ch является русской гласной буквой.
Иначе возвращает False.}
function IsGlasn(ch:char):boolean;
begin
IsGlasn := ch in
['а','е','ё','и','о','у','ы','э','ю','я',
'А','Е','Ё','И','О','У','Ы','Э','Ю','Я'];
end;
{=====================================================}
{Функция FindNextWord.
Ищет в строке S следующее слово, начиная с символа Start.
Если слово найдено, то возвращается True
и возвращается индекс первого символа слова (через BeginWord)
и его длина (через LengthWord).
Если слово не найдено, возвращается False.}
function FindNextWord( const S : String;
Start : Integer;
var BeginWord : Byte;
var LengthWord : Byte) : Boolean;
var
i : Integer; {Индекс может выйти за границы 255,
поэтому Byte использовать нельзя!}
Len : Byte; {Длина строки}
Begin
{Вычисляем длину строки}
Len := length(s);
{Ищем начало слова, начиная со стартового символа строки}
i := Start;
{В цикле продвигаем i вперед по строке до тех пор,
пока не встретится буква или пока не кончится строка }
while not isLetter( S[i] ) and (i <= Len ) do
inc( i );
{Сейчас i указывает на первый символ найденного слова}
BeginWord := i;
{Ищем конец слова}
{Для этого продвигаем i вперед до тех пор, пока не встретится
НЕ БУКВА или пока i не выйдет за пределы строки}
while isLetter(S[i]) and ( i <= Len ) do
inc( i );
{Сейчас i указывает на первый символ-разделитель, следующий
за словом (или i указывает на символ за пределами границ
строки).
Длину слова вычисляем как разность между индексами его
последнего и первого символов }
LengthWord := i - BeginWord;
{Если вычисленная длина слова больше 0, значит, слово в строке
найдено. Возвращаем True.
Иначе - слова в строке нет. Возвращаем False.}
if LengthWord > 0
then FindNextWord := true
else FindNextWord := false;
end;
{=====================================================}
{Функция StringWithoutGlasn.
Возвращает строку, созданную из строки
S путем удаления всех гласных букв.}
function StringWithoutGlasn(const s:string):string;
var
res : string; {Результат}
i : integer;
begin
res := ''; {Сначала результирующая строка пустая}
for i := 1 to length(s) do {Затем все символы}
if not IsGlasn(s[i]) then, {Которые не являются}
res := res + s[i]; {Гласными буквами,
добавляются к строке}
WordWithoutGlasn := res; {Получившаяся строка возвращается}
end;
{=====================================================}
{Функция DeleteGlasn.
В строке S во всех словах, начинающихся на две согласные буквы, удаляются гласные буквы.
Полученная строка возвращается.}
function DeleteGlasn(const s:String):String;
var
newstr : string; {Новая строка}
i : integer; {Счетчик}
beg : byte; {Индекс начала слова}
len : byte; {Длина слова}
w : string; {Выделенное слово}
begin
newstr := ''; {новая строка вначале пустая}
{В строке S ищем все слова по очереди}
I := 1;
while FindNextWord( S, i, beg, len) do {Ищем очередное
слово}
begin
{К новой строке прицепляем все разделители,
стоящие перед очередным словом}
newstr := newstr + Copy(S, i, beg-i);
{Найденное слово копируем в W}
w:=Copy(s,beg,len);
{Если первые две буквы слова являются согласными}
if IsSoglasn(w[1]) and IsSoglasn(w[2]) then
newstr := newstr + WordWithoutGlasn(w) {К строке
прицепляем слово без гласных букв}
else
newstr := newstr + w; {Иначе - прицепляем
неизмененное слово}
I := beg + len; {Поиск очередного слова начнем
с символа, следующего за концом этого слова}
end;
DeleteGlasn := newstr; {Возвращаем созданную новую строку}
end;
{Тело программы}
var
s : string; {трока}
begin
s := 'В словах удалить все гласные буквы';
s := DeleteGlasn(s);
writeln(s); {Будет выведено 'В слвх удалить вс глсн буквы'}
end.