
- •Тип данных строка
- •Var s:shortstring;
- •Var s,s1,s2:string[10];
- •Var s,St:ShortString;
- •If not Pr and not (s[I] in Prep) then
- •IfSimmetr(St)then//проверка очередного слова на симмет-
- •Var s,St:ShortString;
- •If Slovo(St) then //проверка слова на удовлетворение требо-
- •Var s,St:String;
- •Var I,j,Imin:integer;
- •If not (s[I] in Prep) then
- •If WseGlasn(St) then
- •Var s,St:String;
program strokapr3;
{$APPTYPE CONSOLE}
uses
SysUtils;
type Mas=array of String;
Mn=set of Char;
const Prep=[' ', '.', ',', '?', '!', ':', ';', '-'];//множество
//символов-разделителей
Glas=['A','E','I','O','U','Y'];//множество гласных букв
Var s,St:String;
A:Mas;
Pr:Boolean;
I,K:Integer;
function Rus(S:String):String;
var I:Byte;
begin
Result:='';
for I:=1 to Length(S) do
case S[I] of
'А'..'п': Result:=Result+Chr(Ord(S[I])-64);
'р'..'я': Result:=Result+Chr(Ord(S[I])-16);
'Ё': Result:=Result+Chr(240);
'ё': Result:=Result+Chr(241);
else
Result:=Result+S[I];
end;
end;
function RusIn(S:String):String;
var I:Integer;
begin
Result:='';
for I:=1 to Length(S) do
case Ord(S[I]) of
128..175: Result:=Result+Chr(Ord(S[I])+64);
224..239: Result:=Result+Chr(Ord(S[I])+16);
240: Result:=Result+Chr(168);
241: Result:=Result+Chr(184);
else
Result:=Result+S[I];
end;
end;
//функция определения наличия в слове всех гласных букв
function WseGlasn(S:String):Boolean;
var I,N:integer;
Gl:Mn;
begin
Gl:=Glas;//множество всех гласных букв
I:=1;
Result:=false;
N:=Length(S);
while(I<=N)andnotResultdo//проверка символов слова, //пока не будет достигнут его конец и пока множество гласных, //отсутствующих в слове, не станет пустым
begin
Gl:=Gl-[UpCase(S[I])]; //исключение из множества гласных
//очередного символа слова
ifGl=[]thenResult:=true//если получено пустое множе-
//ство, то слово удовлетворяет требованию
else I:=I+1;
end;
end;
procedure Sort(Var A:Mas;N:Integer);
Var I,j,Imin:integer;
Min:String;
begin
for I:=N-1 downto 1 do
begin
Min:=A[I];
Imin:=I;
for J:=I-1 downto 0 do
if A[J]<Min then
begin
Min:=A[J];
Imin:=J;
end;
A[Imin]:=A[I];
A[I]:=Min;
end;
end;
begin
Writeln(Rus('Введите строку символов'));
Readln(S);
S:=RusIn(s);
Writeln(Rus(S));
K:=0;
Pr:=false;
St:='';
for I:=1 to Length(S) do
begin
If not (s[I] in Prep) then
begin
Pr:=true;
St:=St+S[I];
end;
if (S[I] in Prep) or (i=Length(S)) then
begin
Pr:=false;
if St<>'' then
begin
Writeln(Rus(St));
If WseGlasn(St) then
begin
Writeln(Rus(St));
K:=K+1;
SetLength(A,K);
A[K-1]:=St;
end;
end;
St:='';
end;
end;
if k=0 then
Writeln(Rus('Слов со всеми гласными в строке нет'))
else
begin
Sort(A,K);
writeln(Rus('Слова со всеми гласными буквами'));
for I:=0 to K-1 do
Writeln(Rus(A[I]));
end;
Readln;
end.
Пример 4 обработки символьной строки.
Удалить из заданной строки все символы-разделители и подсчитать в полученной строки количество вхождений всех двухсимвольных сочетаний. Вывести все двухсимвольные сочетания, которые встретились в строке, и количество раз, которое они встретились, Двухсимвольное сочетание – два рядом расположенных символа.
program strokapr4;
{$APPTYPE CONSOLE}
uses
SysUtils;
const Nn=Chr(0);
Nk=Chr(255);
type Mas=array[Nn..Nk,Nn..Nk] of integer;
const Prep=[' ', '.', ',', '?', '!', ':', ';', '-'];
Var s,St:String;
A:Mas;
I,J,K:Integer;
C1,C2:Char;
function Rus(S:String):String;
var I:Byte;
begin
Result:='';
for I:=1 to Length(S) do
case S[I] of
'А'..'п': Result:=Result+Chr(Ord(S[I])-64);
'р'..'я': Result:=Result+Chr(Ord(S[I])-16);
'Ё': Result:=Result+Chr(240);
'ё': Result:=Result+Chr(241);
else
Result:=Result+S[I];
end;
end;
function RusIn(S:String):String;
var I:Integer;
begin
Result:='';
for I:=1 to Length(S) do
case Ord(S[I]) of
128..175: Result:=Result+Chr(Ord(S[I])+64);
224..239: Result:=Result+Chr(Ord(S[I])+16);
240: Result:=Result+Chr(168);
241: Result:=Result+Chr(184);
else
Result:=Result+S[I];
end;
end;
begin
Writeln(Rus('Введите строку символов'));
Readln(S);
S:=RusIn(s);
Writeln(Rus(S));
St:='';
for I:=1 to Length(S) do
if not (S[I] in Prep) then
St:=St+S[I];
Writeln(Rus(St));
K:=Length(St);
for I:=1 to K-1 do
A[St[I],St[I+1]]:= A[St[I],St[I+1]]+1;
for C1:=Nn to Nk do
for C2:=Nn to Nk do
if A[C1,C2]<>0 then Write(Rus(C1):1,Rus(C2):2,' - ',A[C1,C2]:3,'|');
Readln;
end.
Задания на обработку строк
Строка символов может содержать до 255 символов. Слово - последовательность символов, не содержащая символов-разделителей. Слова друг от друга отделяются одним или несколькими символами-разделителями. В начале и в конце строки могут стоять разделители (произвольное количество).
1.Найти в строке все слова, начинающиеся на заданную букву. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
2.Найти в строке все слова, оканчивающиеся на заданную букву. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
3.Найти в строке все слова, в которых заданная буква встречается более одного раза. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
4.Найти в строке все слова, являющиеся симметричными. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
5.Найти в строке все слова, в которых гласные и согласные чередуются. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
6.Найти в строке все слова, в которых буквы не повторяются. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
7.Найти в строке все слова, в которых каждая буква встречается более одного раза. Найденные слова распечатать в алфавитном порядке. Если нужных слов нет, то выдать сообщение.
8.Найти в строке самое короткое и самое длинное слова. Подсчитать, сколько раз каждая буква слова встречается в этом слове.
9.Найти в строке самое короткое и самое длинное слова, в которых нет повторяющихся букв.
10.Найти в строке самое короткое и самое длинное слова, в которых каждая буква встречается ровно по два раза.
11.Найти в строке самое короткое и самое длинное слова, в которых одновременно присутствуют все гласные буквы.
12.Найти в строке все слова, начинающиеся на заданную букву. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
13.Найти в строке все слова, оканчивающиеся на заданную букву. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
14.Найти в строке все слова, в которых заданная буква встречается более одного раза. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
15.Найти в строке все слова, являющиеся несимметричными. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
16.Найти в строке все слова, в которых гласные и согласные чередуются. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
17.Найти в строке все слова, в которых есть не менее трех повторяющихся букв. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
18.Найти в строке все слова, в которых каждая гласная буква встречается более одного раза. Найденные слова распечатать в порядке, обратном алфавитному. Если нужных слов нет, то выдать сообщение.
19.Найти в строке самое короткое и самое длинное слова, начинающиеся и оканчивающиеся на заданные буквы. Подсчитать, сколько раз каждая буква слова встречается в этих словах.
20.Найти в строке самое короткое и самое длинное слова, в которых средняя буква совпадает с заданной. Рассматривать слова только с нечетным количеством букв. Если таких слов нет, то выдать сообщение.
21.Найти в строке все слова, начинающиеся с заглавной буквы и распечатать их в
алфавитном порядке. Если таких слов нет, то выдать сообщение.
22.Найти в строке все слова, начинающиеся на гласную букву и оканчивающиеся согласной. Найденные слова распечатать в алфавитном порядке. Если таких слов нет, то выдать сообщение.
23.Найти в строке все слова, начинающиеся на гласную букву и оканчивающиеся гласной. Найденные слова распечатать в порядке, обратном алфавитному. Если таких слов нет, то выдать сообщение.
24.Найти в строке все слова, начинающиеся заглавной согласной буквой и заканчивающиеся согласной. Найденные слова распечатать в алфавитном порядке. Если таких слов нет, то выдать сообщение.
25.Найти в строке все слова, начинающиеся заглавной гласной буквой и оканчивающиеся гласной. Найденные слова распечатать в порядке, обратном алфавитному. Если таких слов нет, то выдать сообщение.
26.Найти в строке все слова, в которых все символы встречаются ровно по два раза. Распечатать их в алфавитном порядке. Если таких слов нет, то выдать сообщение.
27.Найти в строке все слова, в которых буквенные и небуквенные символы чередуются. Найденные слова распечатать в алфавитном порядке. Если таких слов нет, то выдать сообщение.
28.Найти в строке все симметричные слова, начинающиеся на гласную букву и оканчивающиеся гласной. Найденные слова распечатать в порядке, обратном алфавитному. Если таких слов нет, то выдать сообщение.
29.Найти в строке все слова, начинающиеся заглавной согласной буквой и оканчивающиеся согласной. Найденные слова распечатать в порядке, обратном алфавитному. Если таких слов нет, то выдать сообщение.
30.Найти в строке все слова, начинающиеся заглавной гласной буквой и в которых количество согласных превышает количество гласных. Найденные слова распечатать в порядке, обратном алфавитному. Если таких слов нет, то выдать сообщение.