
- •Тип данных строка
- •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;
if UpCase(S[I])in Glas then Kgl:=Kgl+1 else
if UpCase(S[I])in SoGlas then Ksg:=Ksg+1;
if Ksg>Kgl then Result:=true;
end;
//процедура сортировки слов по алфавиту методом нахождения мини-
//мального
procedure Sort(Var A:Mas;N:Integer);
var I,J,Imin:integer;
Min:ShortString;
begin
for I:=1 to N-1 do
begin
Min:=A[I];
Imin:=I;
for J:=I+1 to N 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;
while S[Length(S)] in Prep do //удаление символов-разделителей
//в конце строки
Delete(S,Length(S),1);
while Length(S)>0 do
begin
whileS[1]inPrepdo// удаление символов-разделителей
//в начале строки
Delete(S,1,1);
N2:=Length(S);//установка начального значения для номера ми-
//нимальной позиции символа-разделителя
forI:=1tonpdo//цикл определения номера минимальной по-
//зиции символа-разделителя
begin
N1:=Pos(Rasd[I],S);//определение позиции первого вхождения
//в строку очередного символа-разделителя
if (N1<N2)and(N1>0) then N2:=N1;
end;
ifN2<Length(S)thenN2:=N2-1; //определение позиции оконча-
//ния первого слова
St:=Copy(S,1,N2);//копирование первого слова в служебную пе-
//ременную
Delete(S,1,N2);//удаление первого слова из строки
Writeln(Rus(St));
If Slovo(St) then //проверка слова на удовлетворение требо-
//ваниям задания
begin
Writeln(Rus(St));
K:=K+1; //запоминание слова в массиве
A[K]:=St;
end;
end;
if k=0 then Writeln(Rus('Нужных слов в строке нет'))
else
begin
Sort(A,K);
writeln(Rus('Нужные слова'));
for I:=1 to K do
Writeln(Rus(A[I]));
end;
Readln;
end.
Возможен и третий подход при решении задачи выделения слов, содержащихся в строке. Этот подход практически не предусматривает использования стандартных подпрограмм. Вводится признак, означающий начало слова. Слово начинается, если очередной символ не является разделителем, и к этому моменту слово еще не началось. В случае начала слова признак получает значение “истина” и все символы, не являющиеся разделителями, рассматриваются символами очередного слова, пока не встретится разделитель или очередной символ не будет последним символом строки. В этом случае они копируются во временную переменную.
Пример 3 обработки символьной строки. Найти в строке все слова, которые содержат одновременно все гласные буквы латинского алфавита. Строчные и заглавные буквы не различать.
Найденные слова отсортировать в порядке, обратном алфавитному, методом нахождения минимального.